Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 Resample TBitmap с альфа-каналом  [new]
O_O_P
Member

Откуда:
Сообщений: 2
Ищу код (как можно проще) для изменения размера со сглаживанием TBitmap с альфа-каналом. С поддержкой 64 бит.
Ресайз с SetStretchBltMode(Bitmap.Canvas.Handle, STRETCH_HALFTONE); удаляет альфа-канал.
WIC не предлагать, это на самый край.
В сети нашёл старый код для C (http://www.geisswerks.com/ryan/FAQS/resize.html). Но уж слишком сложный для меня, тем более для перевода с поддержкой x64.
14 фев 20, 23:33    [22080401]     Ответить | Цитировать Сообщить модератору
 Re: Resample TBitmap с альфа-каналом  [new]
alekcvp
Member

Откуда:
Сообщений: 1849
O_O_P,

Поищите здесь.
Например graphics32, по описанию вроде умеет работать с альфаканалом.
И какие-то ресамплеры там есть.
15 фев 20, 13:53    [22080491]     Ответить | Цитировать Сообщить модератору
 Re: Resample TBitmap с альфа-каналом  [new]
O_O_P
Member

Откуда:
Сообщений: 2
alekcvp,
Мне нужно заресайзить TBitmap и передать дальше хэндл.
Graphics32 обратно TBitmap с альфа-каналом вернуть не может. Он хорош для отображения в несколько слоёв, иначе и Canvas.StretchDraw достаточно.
Vampire Image Library может так. Но. TImagingBitmap.Assign(Bmp) при обратном Assign даёт артефакты. Через TSingleImage и Stream load/save получается без артефактов. Но ресайз в библиотеке плохой - часто даёт "сеточку" при уменьшении размеров. Но мультиплатформа.
Остаётся GDI+, но в dll у меня были проблемы.
18 фев 20, 00:17    [22081769]     Ответить | Цитировать Сообщить модератору
 Re: Resample TBitmap с альфа-каналом  [new]
rgreat
Member

Откуда:
Сообщений: 5631
Рисуешь содержимое TBitmap на TBitmap32 ресайзишь и рисуешь результат обратно.

Если скорость не слишком важна - нормальное решение.

Сообщение было отредактировано: 18 фев 20, 01:01
18 фев 20, 01:00    [22081780]     Ответить | Цитировать Сообщить модератору
 Re: Resample TBitmap с альфа-каналом  [new]
Sapersky
Member

Откуда:
Сообщений: 51
Смотря какое сглаживание нужно. Билинейка по 4-м точкам достаточно простая, можно скопипастить из FastDIB, например, и поправить под TBitmap.
Но там свои ограничения, при масштабе меньше 0.5 качество ухудшается.
18 фев 20, 04:27    [22081791]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить