Форум: "Основная";
Текущий архив: 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