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

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

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

Сообщение Ustas » 18.07.2016 13:36:19

Нужна процедура/ы масштабирование (увеличение и уменьшение) изображения с эффектом сглаживания. Можно не сильно навороченные, но рабочие.
Графические пакеты нежелательно.
Может есть у кого в закромах?
Ustas
постоялец
 
Сообщения: 146
Зарегистрирован: 19.10.2009 14:58:10
Откуда: г.Муром

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

Сообщение pupsik » 18.07.2016 19:11:50

Графические пакеты нежелательно.
почему? Да же если они кросс и работают быстро? Взять хотя бы aggpas....
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

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

Сообщение MysticCoder » 18.07.2016 19:57:47

StretchBlt в винде есть. Только перед этим надо вродь параметры задать, чтоб сглаживало какие то.
MysticCoder
постоялец
 
Сообщения: 154
Зарегистрирован: 14.09.2013 00:20:28

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

Сообщение Ustas » 19.07.2016 09:22:23

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

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

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

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

Сообщение Лекс Айрин » 19.07.2016 10:05:59

Ustas, тебе что так, что этак придется прикручивать много лишнего. Если хочешь совсем уж минимального добавления кода, то тебе придется "порезать" добавляемый модуль. А это не такая уж тривиальная задача.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

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

Сообщение MysticCoder » 20.07.2016 11:29:08

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


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

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

так попробуй, должно сглаживать.
MysticCoder
постоялец
 
Сообщения: 154
Зарегистрирован: 14.09.2013 00:20:28

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

Сообщение Ustas » 20.07.2016 17:20:49

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

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

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

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

Сообщение Ism » 20.07.2016 21:52:56

Может в bgrabitmap есть ?
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

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

Сообщение Mirage » 21.07.2016 01:37:43

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

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

Сообщение Alexx2000 » 21.07.2016 12:10:07

Я пользуюсь вот этим модулем. Ничего лишнего.
Аватара пользователя
Alexx2000
постоялец
 
Сообщения: 487
Зарегистрирован: 25.10.2006 00:22:07
Откуда: Мытищи

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

Сообщение Ustas » 21.07.2016 13:29:11

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

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

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

Сообщение Alexx2000 » 21.07.2016 13:38:37

filter - определяет какой фильтр использовать для масштабирования, возможные значения можно увидеть выше (SplineFilter, BellFilter и т.д.). fwidth - не разбирался что такое, просто взял дефолтное значение для выбранного фильтра из массива ResampleFilters. Пример использования:
Код: Выделить всё
Stretch(bmBitmap, Result, ResampleFilters[2].Filter, ResampleFilters[2].Width);
Аватара пользователя
Alexx2000
постоялец
 
Сообщения: 487
Зарегистрирован: 25.10.2006 00:22:07
Откуда: Мытищи

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

Сообщение Ustas » 21.07.2016 14:44:39

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

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

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

Сообщение Alexx2000 » 21.07.2016 15:06:24

В параметр "Dst" передается пустая картинка с требуемыми размерами.
Аватара пользователя
Alexx2000
постоялец
 
Сообщения: 487
Зарегистрирован: 25.10.2006 00:22:07
Откуда: Мытищи

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

Сообщение Ustas » 21.07.2016 16:17:50

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


Вернуться в Графика

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5

Рейтинг@Mail.ru