Форум: "Прочее";
Текущий архив: 2009.01.25;
Скачать: [xml.tar.bz2];
ВнизСамый простой способ вывести PNG Найти похожие ветки
← →
Дмитрий С (2008-11-29 23:56) [0]без VCL. Файл в ресурсе.
← →
Johnmen © (2008-11-30 00:03) [1]Что значит "вывести", да ещё и без V?
← →
Дмитрий С (2008-11-30 00:05) [2]
> Johnmen © (30.11.08 00:03) [1]
Вывести на DC.
← →
palva © (2008-11-30 00:07) [3]Вывести куда? На диск записать из ресурса? Или на мониторе показать? Если второе, то каким образом вы работаете с графикой? У вас Windows API приложение? или может быть какой-нибудь Tk?
← →
palva © (2008-11-30 00:10) [4]
> Вывести на DC.
Вывод на DC кто осуществляет? Вы сами обращаетесь к API функциям или это делает какая-нибудь промежуточная библиотека?
← →
Керк (2008-11-30 00:17) [5]Я делал вывод на DC чисто средствами WinAPI и COM картинки JPG, не уверен, что для PNG тоже самое прокатит, но код могу дать.
← →
oxffff © (2008-11-30 00:20) [6]
> Дмитрий С (29.11.08 23:56)
GDI+
← →
palva © (2008-11-30 00:24) [7]
> средствами WinAPI и COM
А что значит COM, какой сервер вы вызывали? Если Web Browser IE запускали, то PNG он тоже покажет, если в нем полупрозрачность не используется.
← →
palva © (2008-11-30 00:25) [8]Извини Керк, думал, что это пост Дмитрия
← →
Керк (2008-11-30 00:40) [9]Это писалось невероятно давно, так что не пинайте если чего вдруг не так :)
Для JPG в ресурсе работаетprocedure TAboutFrm.PaintBackground(Module: THandle; ResourceName: PChar);
var
ResInfo,ResSize: Cardinal;
ResPtr,Buf: Pointer;
Stream: IStream;
Picture: IPicture;
Rc: TRect;
w,h: Integer;
begin
ResInfo := FindResource(Module,ResourceName,"IMAGE");
ResPtr := LockResource(LoadResource(Module,ResInfo));
ResSize := SizeofResource(Module,ResInfo);
Buf := CoTaskMemAlloc(ResSize);
Move(ResPtr^,Buf^,ResSize);
CreateStreamOnHGlobal(DWORD(Buf),TRUE,Stream);
OleLoadPicture(Stream,0,True,IID_IPicture,Picture);
Picture.get_Height(h);
Picture.get_Width(w);
AboutImg.Picture.Bitmap.Height :=
MulDiv(h,GetDeviceCaps(AboutImg.Picture.Bitmap.Canvas.Handle,LOGPIXELSY),HIMETRI C_INCH);;
AboutImg.Picture.Bitmap.Width :=
MulDiv(w,GetDeviceCaps(AboutImg.Picture.Bitmap.Canvas.Handle,LOGPIXELSX),HIMETRI C_INCH);;
Rc := Rect(0,0,w,h);
Picture.Render(AboutImg.Picture.Bitmap.Canvas.Handle,0,0,
AboutImg.Picture.Bitmap.Width,AboutImg.Picture.Bitmap.Height,0,h,w,-h,Rc);
CoTaskMemFree(Buf);
Picture.Release;
← →
Дмитрий С (2008-11-30 00:42) [10]
> palva © (30.11.08 00:24) [7]
>
>
IE7 нормально выведет, должен по крайней мере.
>
> GDI+
Тоже думаю в эту сторону.
Вот интересно вывод PNG картинки с помощью GDI+ быстрее или медленнее вывода Bitmap-а с альфаканалом функцией AlphaBlend?
← →
Дмитрий С (2008-11-30 00:44) [11]
> Керк (30.11.08 00:40) [9]
Когда мне нужен был jpeg я тоже так делал.
Для PNG это, к сожалению, не работает :(
← →
Керк (2008-11-30 00:47) [12]Ну тогда без доп.модулей наверно никак
← →
Керк (2008-11-30 00:50) [13]Если установлен GDI+, то к чему вопросы вообще? :)
← →
Германн © (2008-11-30 01:02) [14]
> Самый простой способ вывести PNG
Кто бы мне дал самое простое описание данного формата. И ответил бы ясно и просто, почему изображения такого формата разные программы рисуют по разному?
P.S. Не корысти ради, а токмо волею пославшей мя ...
← →
antonn © (2008-11-30 01:17) [15]
> И ответил бы ясно и просто, почему изображения такого формата
> разные программы рисуют по разному?
потому что работают с альфой как захочется :)
← →
Германн © (2008-11-30 01:21) [16]
> antonn © (30.11.08 01:17) [15]
>
>
Ну а об чем тогда спик?
← →
Johnmen © (2008-11-30 01:41) [17]
> Германн © (30.11.08 01:02) [14]
Хм... То, что на поверхности http://www.w3.org/TR/PNG/
> antonn © (30.11.08 01:17) [15]
> потому что работают с альфой как захочется :)
Да ну??? Ты уверен?
← →
Sapersky (2008-11-30 01:50) [18]Самый простой способ - GDI+, как уже говорили.
Далее - KOLPng, TinyPictures (тоже KOL).
Наконец, альтернативный способ - не использовать PNG, использовать BMP. Сжать его чем-нибудь - либо вручную zlib"ом (вроде antonn что-то такое делал), либо банально обработать exe"шник упаковщиком (AsPack, UPX...).
Особой разницы в размере не будет, PNG по сути это тот же zlib + т.н. фильтры для улучшения сжимаемости. Но фильтры помогают не сильно, процентов на 10-15.
← →
KilkennyCat © (2008-11-30 12:22) [19]
> Наконец, альтернативный способ - не использовать PNG, использовать
> BMP.
это не альтернатива. Это все равно, что вместо rtf предложить тхт
← →
antonn © (2008-11-30 12:40) [20]
> KilkennyCat © (30.11.08 12:22) [19]
>
>
> это не альтернатива.
еще какая альтернатива... особенно когда ресурсы не нуждаются в редактировании юзером
а rtf это и есть txt
← →
KilkennyCat © (2008-11-30 12:47) [21]
>
> antonn ©
ага.
Причем здесь редактирование?
Ты вообще представление имеешь о разнице между PNG и BMP? Хотя, глупый вопрос, раз RTF и ТХТ одно и тоже...
← →
antonn © (2008-11-30 13:07) [22]
> Ты вообще представление имеешь о разнице между PNG и BMP?
ну ка просвети, честно интересно, что там есть такого сильноразличимого...
← →
Sapersky (2008-11-30 14:27) [23]это не альтернатива. Это все равно, что вместо rtf предложить тхт
Мой телепатор подсказывает, что все дополнительные фишки PNG, которые не поддерживаются BMP, автору вопроса нафиг не нужны. Ему, скорее всего, нужен только альфа-канал. В этом смысле между BMP и PNG нет принципиальной разницы, как нет разницы между txt и rtf при использовании одного шрифта и отсутствии форматирования.
Единственное отличие - сжатие, но его можно получить и другими средствами.
ну ка просвети, честно интересно, что там есть такого сильноразличимого...
Теоретически - есть и довольно много (PNG поддерживает 48-битный цвет, специфические форматы вроде grayscale + alpha, прозрачный цвет, информацию о гамма-коррекции и прочее - см. ссылку, которую давали в [17]), но практически все эти навороты редко (если вообще) используются.
← →
antonn © (2008-11-30 14:31) [24]
> Sapersky (30.11.08 14:27) [23]
я знаю, что ты знаешь, мне вот хотелось услышать от KilkennyCat, возмущается много :)
← →
Дмитрий С (2008-11-30 14:39) [25]
> В этом смысле между BMP и PNG нет принципиальной разницы
BMP с альфаканалом не очень удобно создавать и редактировать. А в использовании, я согласен, даже проще - не нужно никаких библиотек вообще
← →
Sapersky (2008-11-30 15:51) [26]BMP с альфаканалом не очень удобно создавать и редактировать
Хм, и правда. Пробовал Photoshop 6, ACDSee 8, Irfanview - все при сохранении в bmp почему-то "режут" альфу.
Если нет готового конвертера png->bmp(32 bpp), могу порекомендовать свой вьюер (который к тому же немного конвертер), он альфу сохраняет:
http://sapersky.narod.ru/files/FastView.rar
(480 кб)
← →
antonn © (2008-11-30 15:53) [27]я тож себе написал тулзу, раскладывает битмап на два (лицевой и маска) и собирает обратно, ну и png тож разбирает:)
но не покажу, страшная:)
← →
Andy BitOff © (2008-11-30 15:58) [28]> antonn © (30.11.08 15:53) [27]
Давай, давай, не жмись. При условии что люди, например, пользуют твой код для отображения сплеша, как раз такая приблуда и нужна. Я правда делал один раз и справился фотошопом, но былы бы тузла, то ей, конечно проще.
← →
antonn © (2008-11-30 18:13) [29]но если что - я предупреждал :)
http://desksoft.ru/index.php?downloads=attachments&id=112 (252кб, ZIP, реадми в архиве)
← →
Дмитрий С (2008-11-30 18:46) [30]Я делал с помощью фотошопа. Но в любом случае гдето нужно хранить и оригинал картинки, если вдруг ее понадобится потом редактировать
← →
Andy BitOff © (2008-11-30 21:36) [31]> antonn © (30.11.08 18:13) [29]
То что надо. Проще пареной репы, перетащил кликнул и маска есть. Спасибо ;)
← →
WondeRu © (2008-12-01 09:11) [32]Автор темы, переходите на .NET
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2009.01.25;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.007 c