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 мс. на операцию