Масштабирование изображение со сглаживанием

Модератор: Модераторы

Ответить
Ustas
постоялец
Сообщения: 153
Зарегистрирован: 19.10.2009 14:58:10
Откуда: г.Муром

Масштабирование изображение со сглаживанием

Сообщение Ustas »

Нужна процедура/ы масштабирование (увеличение и уменьшение) изображения с эффектом сглаживания. Можно не сильно навороченные, но рабочие.
Графические пакеты нежелательно.
Может есть у кого в закромах?
pupsik
энтузиаст
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13
Контактная информация:

Сообщение pupsik »

Графические пакеты нежелательно.
почему? Да же если они кросс и работают быстро? Взять хотя бы aggpas....
MysticCoder
постоялец
Сообщения: 154
Зарегистрирован: 14.09.2013 00:20:28

Сообщение MysticCoder »

StretchBlt в винде есть. Только перед этим надо вродь параметры задать, чтоб сглаживало какие то.
Ustas
постоялец
Сообщения: 153
Зарегистрирован: 19.10.2009 14:58:10
Откуда: г.Муром

Сообщение Ustas »

pupsik писал(а):почему?

Там, зачастую, что бы воспользоваться одно процедурой, придется прикручивать половину пакета, не хочется громоздить...
MysticCoder писал(а):StretchBlt в винде есть.

Не лучше чем CopyRect.
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

Ustas, тебе что так, что этак придется прикручивать много лишнего. Если хочешь совсем уж минимального добавления кода, то тебе придется "порезать" добавляемый модуль. А это не такая уж тривиальная задача.
MysticCoder
постоялец
Сообщения: 154
Зарегистрирован: 14.09.2013 00:20:28

Сообщение MysticCoder »

Ustas писал(а):Не лучше чем CopyRect.


CopyRect не масштабирует же.

SetStretchBltMode(hDC,HALFTONE);
StretchBlt(hDC,630,500,200,200, hDC, 0,0,400,400, SRCCOPY);

так попробуй, должно сглаживать.
Ustas
постоялец
Сообщения: 153
Зарегистрирован: 19.10.2009 14:58:10
Откуда: г.Муром

Сообщение Ustas »

MysticCoder писал(а):CopyRect не масштабирует же.

Масштабирует, причем можно вырезать и куски.

StretchBlt пробовал, ну может чуть лучше, хотя не факт и зависит от самой картинки и коэффициента мастабирования.
Ism
энтузиаст
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Сообщение Ism »

Может в bgrabitmap есть ?
Mirage
энтузиаст
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia
Контактная информация:

Сообщение Mirage »

https://github.com/casteng/base/blob/dev/Base2D.pas
там есть функция ResizeImage(), которая берет кусок одного изображения и вставляет в кусок другого, применяя указанный фильтр.
При необходимости, сконвертит в RGBA формат. Но это можно вырезать, т.к. тащит еще одну функцию.
А так только простые типы из другого модуля используются.
Ну еще используется Garbage := CreateRefcountedContainer, что можно выкинуть и освобождать память вручную.
Аватара пользователя
Alexx2000
постоялец
Сообщения: 490
Зарегистрирован: 25.10.2006 00:22:07
Откуда: Мытищи
Контактная информация:

Сообщение Alexx2000 »

Я пользуюсь вот этим модулем. Ничего лишнего.
Ustas
постоялец
Сообщения: 153
Зарегистрирован: 19.10.2009 14:58:10
Откуда: г.Муром

Сообщение Ustas »

Alexx2000 писал(а):Я пользуюсь вот этим модулем. Ничего лишнего.

Прокомментируй последние два параметра: filter и fwidth
Аватара пользователя
Alexx2000
постоялец
Сообщения: 490
Зарегистрирован: 25.10.2006 00:22:07
Откуда: Мытищи
Контактная информация:

Сообщение Alexx2000 »

filter - определяет какой фильтр использовать для масштабирования, возможные значения можно увидеть выше (SplineFilter, BellFilter и т.д.). fwidth - не разбирался что такое, просто взял дефолтное значение для выбранного фильтра из массива ResampleFilters. Пример использования:

Код: Выделить всё

Stretch(bmBitmap, Result, ResampleFilters[2].Filter, ResampleFilters[2].Width);
Ustas
постоялец
Сообщения: 153
Зарегистрирован: 19.10.2009 14:58:10
Откуда: г.Муром

Сообщение Ustas »

Alexx2000 писал(а):Я пользуюсь вот этим модулем

Так, каким образом производиться масштабирование, как задается коэффициент масштабирования?
Аватара пользователя
Alexx2000
постоялец
Сообщения: 490
Зарегистрирован: 25.10.2006 00:22:07
Откуда: Мытищи
Контактная информация:

Сообщение Alexx2000 »

В параметр "Dst" передается пустая картинка с требуемыми размерами.
Ustas
постоялец
Сообщения: 153
Зарегистрирован: 19.10.2009 14:58:10
Откуда: г.Муром

Сообщение Ustas »

Alexx2000, спасибо, будем тестировать.
А также, спасибо всем, кто принял/примет участие...
Ответить