| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Звук, графика и видео > Скопировать часть изображения |
| Автор: Proxin 21.8.2010, 02:01 |
| Как можно скопировать часть изображения из одного png-рисунка в другой? bitblt в этом случае не работает. Для хранения png использую tpngobject. |
| Автор: x128 21.8.2010, 12:10 |
| Для TPngObject лучше копировать ручками через Scanline и AlphaScanline т.к. BitBlt альфу не скопирует, а метод Draw наложит с учетом альфы копируемый фрагмент. |
| Автор: Proxin 21.8.2010, 14:46 |
| можете пример привести? |
| Автор: AntonN 21.8.2010, 21:17 |
| пример http://desksoft.ru/index.php?downloads=attachments&id=256 рисования bitmap на канву (точнее на другой буфер) через сканлайн, не сложно переписать под пнг (либо png перегонять в tbitmap) |
| Автор: Proxin 24.8.2010, 17:06 | ||
Проблема решена. Вот код:
Входной файл - длинный лист иконок (16х16). |
| Автор: AntonN 24.8.2010, 21:47 |
| альфаканал тоже копируется? |
| Автор: x128 25.8.2010, 12:56 | ||
Полная ерунда! 1) Зачем там битмап? 2)
Как-то так. Надеюсь смысл понятен. |
| Автор: Proxin 25.8.2010, 15:41 |
| да, действительно, мой код дерьмовый. не разобрался с форматом до конца ещё. кстати, где в в tpngobject нашли createblank? и гед у tpngobject canvas? |
| Автор: x128 25.8.2010, 16:47 | ||||
|
| Автор: Flashboy 27.9.2010, 21:42 | ||||
x128,
Как в данном случае избежать переполнения, сейчас функция выделяет память под PNG,но не рушит его? Прогоните функцию несколько тысяч раз с большими изображениями и посмотрите на выделенную память под приложение. Можно конечно переделать в процедуру, но а есть ли вариант высвободить память оставив алгоритм функцией??? |
| Автор: AntonN 28.9.2010, 21:30 |
| не знаю как остальные, но я бы так делать поостерегся (создавать в процедуре и возвращать указатель на объект), а вдруг он не создастся, а там ниже dst.Free? |
| Автор: Flashboy 28.9.2010, 21:41 | ||||||
А Так?:
Было мной протестировано, память высвобождается при многократном использовании, в остальных случаях(функция и пример ниже) высвобождение не происходит.
Согласен с этим если сделать так:
|
| Автор: Qu1nt 28.9.2010, 23:41 |
| AntonN, Эээ, и что?! |
| Автор: AntonN 29.9.2010, 01:22 |
| Qu1nt, наверное можно получить AV, не? |
| Автор: Qu1nt 29.9.2010, 09:33 | ||
AntonN,
Откуда AV? |
| Автор: AntonN 30.9.2010, 08:19 | ||
|
| Автор: Qu1nt 30.9.2010, 12:26 | ||
Для этого придумали конструкцию try-finally.
|
| Автор: AntonN 30.9.2010, 21:09 |
| Qu1nt, ты ее видишь в коде который нам дали? Я нет. Более того, что то подобное нужно делать и в самой CreatePNG(). |