Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2013.09.15;
Скачать: [xml.tar.bz2];

Вниз

Работа с 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.002 c
15-1365199357
Дмитрий С
2013-04-06 02:02
2013.09.15
Переменные окружения и COM объект.


15-1365423706
ВВВ
2013-04-08 16:21
2013.09.15
Syntax Check - Hotkey.


2-1357246105
Irmantukas
2013-01-04 00:48
2013.09.15
Несрабатывает имитация нажатия левой кнопки мышки...


3-1292492845
RWolf
2010-12-16 12:47
2013.09.15
ClientDataSet: Insufficient memory for this operation


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





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский