Difference between revisions of "Picture.Resize"
(Created page with "{{infobox function |name=Resize |object=Картинка |caption=Изменение размера картинки |type=1 |status=2 |db=0 |exception=Невозможн...") |
m (1 revision imported) |
(No difference)
|
Latest revision as of 07:52, 7 February 2021
Resize (Изменение размера картинки) | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Функция изменяет размеры картинки до указанных. При изменении размеров будет применен требуемый алгоритм масштабирования (resampling). Скорость работы функции зависит не только от алгоритма масштабирования, но и количества точек в картинке-результате.
Синтаксис
Picture.Resize(<Ширина получаемой картинки (INT)>,<Высота получаемой картинки (INT)>,<Алгоритм масштабирования (INT)>=0)
Аргументы
<Ширина получаемой картинки (INT)>
- Ширина картинки-результата в пикселях.<Высота получаемой картинки (INT)>
- Высота картинки-результата в пикселях.<Алгоритм масштабирования (INT)>
- (необязательный аргумент) Алгоритм масштабирования при повороте. Возможные следующие значения:- 0 (по умолчанию) - Без сглаживания. Самый быстрый режим, однако для текста и точных объектов создает неприглядный результат.
- 1 - Метод ближайшего соседа (Nearest neighbor). Медленнее первого режима, однако создает почти такой же неприглядный результат.
- 2 - Метод билинейной фильтрации (Bilinear). Режим создает гладкую картинку, однако работает медленнее, чем первые два режима.
- 3 - Метод бикубической фильтрации (Bicubic). Режим создает гладкую картинку, при этом границы объектов (или текста) более выражены по сравнению с билинейной фильтрацией (меньше ощущаемое размытие). Режим работает значительно медленнее билинейной фильтрации и может создавать цветовые артефакты (неверные цвета, которые отсутствовали в оригинальном изображении) на границах резкого изменения цветов
Примеры
//Пример сравнивает скорость различных алгоритмов масштабирования для небольшой картинки aPic:=Picture.Create(400,400); aPic.Rectangle(1,1,200,200,,_CLR_RED); aPic.Rectangle(201,1,400,200,,_CLR_BLUE); aPic.Rectangle(1,201,200,400,,_CLR_GREEN); aPic.Rectangle(201,201,400,400,,_CLR_YELLOW); aPic.Text(1,1,"1","Tahoma|40|B|"+DecToBase(_CLR_YELLOW,16),,,,3); aPic.Text(201,1,"2","Tahoma|40|B|"+DecToBase(_CLR_GREEN,16),,,,3); aPic.Text(1,201,"3","Tahoma|40|B|"+DecToBase(_CLR_BLUE,16),,,,3); aPic.Text(201,201,"4","Tahoma|40|B|"+DecToBase(_CLR_RED,16),,,,3); ProfilerClear(); ProfilerStart(); Коэфф:=1.42; For i:=1 to 100 Do aPic2:=aPic.Copy(); aPic2.Resize(aPic.Width*Коэфф,aPic.Height*Коэфф,0); EndDo; For i:=1 to 100 Do aPic2:=aPic.Copy(); aPic2.Resize(aPic.Width*Коэфф,aPic.Height*Коэфф,1); EndDo; For i:=1 to 100 Do aPic2:=aPic.Copy(); aPic2.Resize(aPic.Width*Коэфф,aPic.Height*Коэфф,2); EndDo; For i:=1 to 100 Do aPic2:=aPic.Copy(); aPic2.Resize(aPic.Width*Коэфф,aPic.Height*Коэфф,3); EndDo; ProfilerStop(); debugbreak; Message("Done!"); //Результат для i5: //Без сглаживания: 3.9 мс. на операцию //Метод ближайшего соседа: 6.5 мс. на операцию //Метод билинейной фильтрации: 15.8 мс. на операцию //Метод бикубической фильтрации: 96.2 мс. на операцию