Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.09.15;
Скачать: CL | DM;

Вниз

Работа с PNG изображением в Delphi 2010   Найти похожие ветки 

 
Developer   (2011-08-22 12:33) [0]

Здравствуйте,

Нужен совет опытного программиста. В Delphi 2010 в отличии от предыдущих версий добавлена поддержка изображений PNG формата по умолчанию (нет необходимости ставить сторонние пакеты). По этому возникает логический вопрос, получается что в Delphi 2010 должны существовать ряд готовых функций для работы с этим форматом? Допустим копирование определенного куска изображения (с учетом прозрачности) или допустим задание уровня прозрачности исходного изображения при копировании (допустим 128, что эквивалентно 50%) и т.д.

Заранее спасибо за совет или полезную ссылку


 
~AQUARIUS~   (2011-08-22 14:28) [1]

В D2010 просто встроили тот же модуль, который в старые версии приходилось ставить самому. Так что от этого ничего нового не прибалось


 
Developer   (2011-08-23 01:55) [2]

Спасибо! Получается я могу пользоваться допустим функцией "AlphaBlend" также, как я делал это ранее, я верно вас понял?


 
Бендер Остап Ибрагимович   (2011-08-23 01:57) [3]

Да. Но лучше найди и пользуй GDI+, я как-то пробовал, эффективно. Реализация для делфи есть.


 
Developer   (2011-08-23 04:57) [4]

Спасибо на счет GDI+, но я как то пробовал использовать ее под WinXP и при запуске программы была значительная задержка (секунд 5-10, в зависимости от параметров ПК). Как потом выяснилось, в WinXP GDI+ не запущен по умолчанию. По этому при каждом запуске моей программы, надо дожидаться пока весь модуль подгрузится. Из всего этого вытекает логический вопрос: допустим я пожертвую быстрым запуском, но что я получу в замен? Какие преимущества у GDI+?


 
Developer   (2011-08-23 06:09) [5]

Ну и вдогонку еще один вопрос. Как только я создаю BitMap он автоматом заполняется белым цветом, если я перевожу формат точек в 32 битный режим это только включает поддержку прозрачного цвета. А теперь сам вопрос, как сделать всю поверхность BitMap-а прозрачной (подготовить для работы)? Перерыл весь интернет, нашел вроде одно решение для GDI+ но что делать под чистым D2010? Неужели придется через сканлаин менять прозрачность для каждого пикселя?


 
Developer   (2011-08-23 07:46) [6]

Наконец нашел в сорсах самого Delphi, оказалось не все у них на автомате работает. Так что вместо TBitMap надо все же пользоваться TPNGGraphic (TPNGImage или TPNGBitmap не работает). После создания объекта не надо забыть указать глубину пикселя в 32 бит (bitmap.PixelFormat := pf32bit) а дальше все как и раньше.

п.с. единственное не понятно чем им не угодили названия TPNGBitmap, ведь в таком случае даже не пришлось бы переделывать старый код. Да и зачем задавать 32 битный код вручную? Кто то может представить PNG файл без прозрачности?


 
Дмитрий Белькевич   (2011-08-23 10:08) [7]


> в WinXP GDI+ не запущен по умолчанию


Что значит - не запущен по умолчанию? Это ж обычные библиотеки (дллки), насколько я знаю.


 
Developer   (2011-08-23 10:40) [8]

Для грубой аналогии можно взять DirectX. При старте программы происходит запуск данного движка и на это необходимо время. Тоже самое и с GDI+, но под 7 я знаю точно что данная библиотека автоматом запущена (возможно ее использует сама ОС) и при запуске программы нет задержки.

Кстати у меня тут очень простой вопрос касательно ООП (уже больше года как не программировал именно на Delphi и не припомню как такое реализовать). Есть класс у которого есть свойство picture: TPicture, как поймать момент когда изображение в данном объекте изменилось? SetPicture() вызывается только если мы явно присвоим значение className.Picture := image.Picture. А что если фотографию подгрузили через classname.Picture.LoadFromFile()? В таком случае объект не меняется, меняется только содержимое и соответственно SetPicture() молчит.

Спасибо


 
Developer   (2011-08-23 13:30) [9]

Сам вспомнил, если кто случайно будет искать тоже самое то напоминаю, достаточно повесить свой обработчик на OnChange событие данного объекта TPicture. Всем спасибо за участие.


 
Дмитрий Белькевич   (2011-08-23 15:11) [10]


>  При старте программы происходит запуск данного движка и
> на это необходимо время.


Какой такой "запуск"? Разве какие-то сервисы нужны для запуска DirectX/GDI+? А если нет - то что может быть "автоматом запущено"?


 
Developer   (2011-08-23 18:10) [11]

Вот что значит прогресс :) И вот почему реальных программистов остается все меньше и меньше. А теперь по сути вопроса, вы найдите где то старенький П4 с 1гб памятью и попробуйте на нем запустить программу с GDI+ или DirectX, сразу увидите о чем я говорю. Дело в том что под двух? или даже четырех ядерным процессором, с 4гб оперативной памятью разницы не заметишь. Но я лично отношусь к тому числу программистов, который пишет программы для ВСЕХ :)

п.с. это тоже самое что говорить что нет разницы между BitBlt и Draw, а тем более работа с фото через ScanLine.


 
Бендер Остап Ибрагимович   (2011-08-23 22:03) [12]


> А теперь по сути вопроса, вы найдите где то старенький П4
> с 1гб памятью и попробуйте на нем запустить программу с
> GDI+ или DirectX, сразу увидите о чем я говорю. Дело в том
> что под двух? или даже четырех ядерным процессором, с 4гб
> оперативной памятью разницы не заметишь. Но я лично отношусь
> к тому числу программистов, который пишет программы для
> ВСЕХ :)
>
> п.с. это тоже самое что говорить что нет разницы между BitBlt
> и Draw, а тем более работа с фото через ScanLine.


бред, вообще-то. извини, но - неверно. читай про винапи.


 
Дмитрий Белькевич   (2011-08-23 22:49) [13]


> А теперь по сути вопроса, вы найдите где то старенький П4
> с 1гб памятью и попробуйте на нем запустить программу с
> GDI+ или DirectX, сразу увидите о чем я говорю.


Да мы софт под дайрект пишем как бы. В минимальных требованиях - 1000 мгц. В принципе - на 600-м целероне с 16-ю мб видео сносно работает. Никаких особенных задержек не замечено, ни при старте ни при работе. Так только - перманентно скорости на динамике не хватает и картинок много сразу не покажешь. Решили недавно требования поднять только из-за того, что уже такого нового железа нет нигде.


 
Дмитрий Белькевич   (2011-08-23 22:56) [14]


> но под 7 я знаю точно что данная библиотека автоматом запущена
> (возможно ее использует сама ОС) и при запуске программы
> нет задержки.


Еще раз - что значит "библиотека запущена"? Dll"ка не может быть никаким образом запущена, кроме как прилинкована к твоему экзешнику при старте (ну или позже - не суть важно). Линкуются библиотеки одинаково, что в xp, что в 7-ках.

Другое дело, что может быть запущен или не запущен какой-то сервис, обслуживающий direct/gdi+. Так нет такого, насколько я знаю.


 
Ega23 ©   (2011-08-24 10:32) [15]


> Но я лично отношусь к тому числу программистов, который
> пишет программы для ВСЕХ :)


Гхм...


 
Бендер Остап Ибрагимович   (2011-08-24 11:20) [16]


> Ega23 ©   (24.08.11 10:32) [15]

это инопланетный программист.



Страницы: 1 вся ветка

Текущий архив: 2013.09.15;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.006 c
3-1292492845
RWolf
2010-12-16 12:47
2013.09.15
ClientDataSet: Insufficient memory for this operation


2-1356651162
NS
2012-12-28 03:32
2013.09.15
Альфа канал иконки


15-1365008140
Технарь
2013-04-03 20:55
2013.09.15
Девайс с браузером для ТВ


2-1356680112
aka
2012-12-28 11:35
2013.09.15
Работа с указателями


15-1365197648
Чайник
2013-04-06 01:34
2013.09.15
Нич-чо не понимаю!