Модераторы: Snowy, Alexeis, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> PNG Dirty Transparency 
V
    Опции темы
lorents
Дата 13.7.2010, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 548
Регистрация: 2.4.2008

Репутация: нет
Всего: нет



Как можно сделать тоже самое?
http://www.artlebedev.ru/tools/technogrette/img/png-3/


--------------------
PM MAIL   Вверх
pseud
Дата 13.7.2010, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

Репутация: нет
Всего: 40



Цитата(lorents @  13.7.2010,  09:55 Найти цитируемый пост)
Как можно сделать тоже самое?

так там в ссылке указано "как сделать".
сформулируй вопрос.


--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
Alexeis
Дата 13.7.2010, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 55
Всего: 459



lorents, есть класс TPngObject . У него свойство AlphaSanline пробегаешься по альфе и смотришь значение. Если значение 0 - полная прозрачность, то пиксель с теми же координатами заменяешь на определенный цвет (свойство ScanLine). Начиная с делфи 2009 этот класс поставляется с делфей. Для более ранних версий его можно скачать (например с torry.net)


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
lorents
Дата 13.7.2010, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 548
Регистрация: 2.4.2008

Репутация: нет
Всего: нет



Может кто-нибудь подкинуть ссылки на статьи о PNG (желательно на русском), т.к. ничего нормального найти не получается, в википедии не то что надо. В основном интересует информация о маске и всё что касается прозрачности. 


--------------------
PM MAIL   Вверх
Alexeis
Дата 13.7.2010, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 55
Всего: 459



Цитата(lorents @  13.7.2010,  10:15 Найти цитируемый пост)
Может кто-нибудь подкинуть ссылки на статьи о PNG (желательно на русском), т.к. ничего нормального найти не получается, в википедии не то что надо. В основном интересует информация о маске и всё что касается прозрачности.  

  формат png бывает 2х по цветности видов 8бит и 24бит на пиксель и 2х видов по прозрачности. Прозрачность цвета (записывается прямо в палитре) и прозрачность пикселя. Прозрачность пикселя храниться отдельно в виде дополнительного 8ми битного битмапа у которого вместо цвета значение прозрачности. Размер этого битмапа равен размеру исходной картинки. Тонкости размещения по секциям и сжатия в данном контексте думаю не интересны.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
lorents
Дата 13.7.2010, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 548
Регистрация: 2.4.2008

Репутация: нет
Всего: нет



Alexeis, понятно. спасибо.

пойду разбираться дальше

А Вы не знаете как программно сделать вот это
http://www.artlebedev.ru/tools/technogrette/img/png-3/


--------------------
PM MAIL   Вверх
AntonN
Дата 13.7.2010, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 8.8.2006

Репутация: 7
Всего: 18



как-то так...
Код


const
  MaxPixelCountA = MaxInt div SizeOf(TRGBQuad);
type
  PRGBAArray = ^TRGBAArray;
  TRGBAArray = array[0..MaxPixelCountA-1] of TRGBQuad;


procedure BuildPNG2BMP(png_file:string; bt:Tbitmap);
var iii,ii:integer;
    PNB:TPngObject; fff:PRGBAArray; aaa:pByteArray;
begin
  PNB:=TPngObject.Create;
  try
    PNB.LoadFromFile(png_file);
    pnb.CreateAlpha;
    bt.Assign(pnb);
    bt.PixelFormat:=pf32bit;
    for ii:=0 to bt.Height-1 do begin
       fff:=bt.ScanLine[ii];
       aaa:=pnb.AlphaScanline[ii];
       for iii:=0 to bt.Width-1 do begin
         fff[iii].rgbReserved:=aaa[iii];
       end;
    end;
  finally
    PNB.free;
  end;
end;

procedure BuildBMP2PNG(bt:Tbitmap; png_file:string );
var iii,ii:integer;
    PNB:TPngObject; fff:PRGBAArray; aaa:pByteArray;
begin
  PNB:=TPngObject.Create;
  try
    bt.PixelFormat:=pf32bit;
    PNB.Assign(bt);
    pnb.CreateAlpha;
    for ii:=0 to bt.Height-1 do begin
        fff:=bt.ScanLine[ii];
        aaa:=pnb.AlphaScanline[ii];
        for iii:=0 to bt.Width-1 do begin
          aaa[iii]:=fff[iii].rgbReserved;
        end;
    end;
    PNB.SaveToFile(png_file);
  finally
    PNB.free;
  end;
end;

procedure BuildPNG_black_alpha(png_file:string; color:Tcolor);
var x,y:integer; fff:PRGBAArray;
    bt:tbitmap;  rc1,bc1,gc1:byte;
begin
  bt:=tbitmap.Create;
  try
    bt.PixelFormat:=pf32bit;
    BuildPNG2BMP(png_file,bt);

    rc1:=GetRValue(color);
    gc1:=GetGValue(color);
    bc1:=GetBValue(color);

    for y:=0 to bt.Height-1 do begin
        fff:=bt.ScanLine[y];
        for x:=0 to bt.Width-1 do begin
          if(fff[x].rgbReserved=0) then begin
             fff[x].rgbBlue:=bc1;
             fff[x].rgbGreen:=gc1;
             fff[x].rgbRed:=rc1;
          end;
        end;
    end;

    BuildBMP2PNG(bt,png_file);
  finally
    bt.free;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  BuildPNG_black_alpha('gnome-globe.png',clblack);
end;



--------------------
user posted image
PM MAIL WWW   Вверх
Alexeis
Дата 13.7.2010, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 55
Всего: 459



Цитата(lorents @  13.7.2010,  10:46 Найти цитируемый пост)
А Вы не знаете как программно сделать вот это
http://www.artlebedev.ru/tools/technogrette/img/png-3/

  Так алгоритм я уже описал. TPngObject после загрузки определит такую картинку как 2 битмапа (работает аналогично TBitmap) . Обращаешься к пикселам как к матрице высота х ширина, точнее получается массив указателей на строки. Если сильно нужно, то можно обратиться к данным и как к непрерывному массиву, но тогда порядок строк будет обратным (так приятно хранить битмап)


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Bitter
Дата 13.7.2010, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

Репутация: 6
Всего: 27



Знаем. Нужно пройтись по всем пикселям, и заменить их цвет по формуле Color = Alpha/255 * Color

Это сообщение отредактировал(а) Bitter - 13.7.2010, 12:07
PM MAIL ICQ Skype   Вверх
lorents
Дата 13.7.2010, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 548
Регистрация: 2.4.2008

Репутация: нет
Всего: нет



AntonN, а можно скомпилировать в ехе, у меня проста не под рукой Delphi


--------------------
PM MAIL   Вверх
AntonN
Дата 13.7.2010, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 8.8.2006

Репутация: 7
Всего: 18



Bitter, 
это нужно лишь там, где неполная формула блитинга (например в updatelayaeredwindow), в случае автора это лишь исказит информацию в файле.

Добавлено через 4 минуты и 32 секунды
lorents, 
вот http://desksoft.ru/index.php?downloads=att...ents&id=279 (rar)
только сначала забекапь те картинки, над которыми будешь экспериментировать


--------------------
user posted image
PM MAIL WWW   Вверх
lorents
Дата 13.7.2010, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 548
Регистрация: 2.4.2008

Репутация: нет
Всего: нет



AntonN, 
Цитата(AntonN @  13.7.2010,  12:14 Найти цитируемый пост)
только сначала забекапь те картинки, над которыми будешь экспериментировать 

а что значит "забекапь"?
и для чего там Combobox?

Спасибо, очень вам признателен за Вашу помощь


--------------------
PM MAIL   Вверх
AntonN
Дата 13.7.2010, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 8.8.2006

Репутация: 7
Всего: 18



Резервную копию оставь, вдруг не понравится smile
В комбобоксе выбирается цвет которым зальется облась с нулевой альфой (открой png в обычном виндовом Пейнте - увидишь).
Хотя как по мне такая "фича" специфична, например если картинка будет поворачиваться (текстура в игре) то заливка может потом вылезти в виде цветной каймы по краям.


--------------------
user posted image
PM MAIL WWW   Вверх
lorents
Дата 13.7.2010, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 548
Регистрация: 2.4.2008

Репутация: нет
Всего: нет



AntonN, код, что надо, Спасибо

есть сайт по оптимизации картинок PunyPng
и он делает тоже самое, что и твой код

Твой код проиграл в двух картинках. я использую определенный алгоритм оптимизации png. поэтому результаты крайне точные, есть возможность исправить твой код, чтобф он не проигрывал?

прикрепил картинки, которые проиграли


Присоединённый файл ( Кол-во скачиваний: 14 )
Присоединённый файл  Comic_Book_Guy.png 87,36 Kb


--------------------
PM MAIL   Вверх
lorents
Дата 13.7.2010, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 548
Регистрация: 2.4.2008

Репутация: нет
Всего: нет



вот вторая картинка

Это сообщение отредактировал(а) lorents - 13.7.2010, 14:24

Присоединённый файл ( Кол-во скачиваний: 17 )
Присоединённый файл  ff_logo_big.png 96,94 Kb


--------------------
PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.0623 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.