Масштабирование изображение со сглаживанием
Модератор: Модераторы
Масштабирование изображение со сглаживанием
Нужна процедура/ы масштабирование (увеличение и уменьшение) изображения с эффектом сглаживания. Можно не сильно навороченные, но рабочие.
Графические пакеты нежелательно.
Может есть у кого в закромах?
Графические пакеты нежелательно.
Может есть у кого в закромах?
почему? Да же если они кросс и работают быстро? Взять хотя бы aggpas....Графические пакеты нежелательно.
-
MysticCoder
- постоялец
- Сообщения: 154
- Зарегистрирован: 14.09.2013 00:20:28
StretchBlt в винде есть. Только перед этим надо вродь параметры задать, чтоб сглаживало какие то.
pupsik писал(а):почему?
Там, зачастую, что бы воспользоваться одно процедурой, придется прикручивать половину пакета, не хочется громоздить...
MysticCoder писал(а):StretchBlt в винде есть.
Не лучше чем CopyRect.
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
Ustas, тебе что так, что этак придется прикручивать много лишнего. Если хочешь совсем уж минимального добавления кода, то тебе придется "порезать" добавляемый модуль. А это не такая уж тривиальная задача.
-
MysticCoder
- постоялец
- Сообщения: 154
- Зарегистрирован: 14.09.2013 00:20:28
Ustas писал(а):Не лучше чем CopyRect.
CopyRect не масштабирует же.
SetStretchBltMode(hDC,HALFTONE);
StretchBlt(hDC,630,500,200,200, hDC, 0,0,400,400, SRCCOPY);
так попробуй, должно сглаживать.
MysticCoder писал(а):CopyRect не масштабирует же.
Масштабирует, причем можно вырезать и куски.
StretchBlt пробовал, ну может чуть лучше, хотя не факт и зависит от самой картинки и коэффициента мастабирования.
Может в bgrabitmap есть ?
-
Mirage
- энтузиаст
- Сообщения: 881
- Зарегистрирован: 06.05.2005 20:29:07
- Откуда: Russia
- Контактная информация:
https://github.com/casteng/base/blob/dev/Base2D.pas
там есть функция ResizeImage(), которая берет кусок одного изображения и вставляет в кусок другого, применяя указанный фильтр.
При необходимости, сконвертит в RGBA формат. Но это можно вырезать, т.к. тащит еще одну функцию.
А так только простые типы из другого модуля используются.
Ну еще используется Garbage := CreateRefcountedContainer, что можно выкинуть и освобождать память вручную.
там есть функция ResizeImage(), которая берет кусок одного изображения и вставляет в кусок другого, применяя указанный фильтр.
При необходимости, сконвертит в RGBA формат. Но это можно вырезать, т.к. тащит еще одну функцию.
А так только простые типы из другого модуля используются.
Ну еще используется Garbage := CreateRefcountedContainer, что можно выкинуть и освобождать память вручную.
- Alexx2000
- постоялец
- Сообщения: 490
- Зарегистрирован: 25.10.2006 00:22:07
- Откуда: Мытищи
- Контактная информация:
Я пользуюсь вот этим модулем. Ничего лишнего.
Alexx2000 писал(а):Я пользуюсь вот этим модулем. Ничего лишнего.
Прокомментируй последние два параметра: filter и fwidth
- Alexx2000
- постоялец
- Сообщения: 490
- Зарегистрирован: 25.10.2006 00:22:07
- Откуда: Мытищи
- Контактная информация:
filter - определяет какой фильтр использовать для масштабирования, возможные значения можно увидеть выше (SplineFilter, BellFilter и т.д.). fwidth - не разбирался что такое, просто взял дефолтное значение для выбранного фильтра из массива ResampleFilters. Пример использования:
Код: Выделить всё
Stretch(bmBitmap, Result, ResampleFilters[2].Filter, ResampleFilters[2].Width);
Alexx2000 писал(а):Я пользуюсь вот этим модулем
Так, каким образом производиться масштабирование, как задается коэффициент масштабирования?
Alexx2000, спасибо, будем тестировать.
А также, спасибо всем, кто принял/примет участие...
А также, спасибо всем, кто принял/примет участие...
