Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
3-1213855653
deodora
2008-06-19 10:07
2009.01.25
приложения для редактирования таблицы на MySQL сервере


1-1207222142
аноним
2008-04-03 15:29
2009.01.25
RemoteServer и ProgressBar на клиенте


2-1228500289
lusuj
2008-12-05 21:04
2009.01.25
синтаксический контроль заданного оператора


15-1227857402
TUser
2008-11-28 10:30
2009.01.25
Исчезновение поверхности


15-1227879306
Долетел
2008-11-28 16:35
2009.01.25
Форматирование кода, двигаем строчки вправо





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский