![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Быстрый ресамплинг изображений [D6]
badevlad © (2007-03-07 11:14:00)Кто какие знает алгоритмы быстрого ресамплинга битмапов? Я нашел несколько довольно неплохо работающих функций, но метод Lanczos, который у меня есть, работает очень медленно и оставляет артефакты (при небольшой степени сжатия на однотонном изображении появляются слабо видимые «клеточки»). Более быстрые и менее аккуратные алгоритмы страдают артефактами еще сильнее (ярко выраженные «клеточки»). Хорошо работает только билинейный метод, но этого мало.
Кто с этим сталкивался и может подсказать безглючные и быстро работающие алгоритмы? Нужен код на Delphi, чем больше вариантов, тем лучше.
Sapersky (2007-03-09 12:45:00) [1]Оптимизатор справляется, хотя я на это не надеялся - просто shr сравнительно быстрая операция, и влияние двух лишних команд будет заметно только на очень простом коде, но не в том нагромождении, которое имеется в DoFilter.
Кстати, ускорение в основном достигнуто именно за счёт замены деления (div) сдвигом (можно переключиться на старый метод - ForceOneCont = False и почувствовать разницу) и использованием указателя (c := @Src.Pixels24[pw.pos, x];) вместо переменной.
Сотрудник деканата (2007-03-07 21:00:00) [2]Т.е. завести еще одну переменную
w := pw.w;
w1 := w shr 1;
и вместоw shr 1использовать w1.
Сотрудник деканата (2007-03-07 20:58:00) [3]Круто! Спасибо большое.
А вот например код
w := pw.w;
If ForceOneCont then begin
Inc(zr, w shr 1); Inc(zg, w shr 1); Inc(zb, w shr 1);
.....
....
zr := (zr + (w shr 1)) div w;
zg := (zg + (w shr 1)) div w;
zb := (zb + (w shr 1)) div w;
почему бы сразу не присваивать
w := pw.w shr 1?
Или оптимизатор в Delphi сам с этим справляется?
Sapersky (2007-03-07 20:05:00) [4]http://slil.ru/24043787
Сотрудник деканата (2007-03-07 17:39:00) [5]> Sapersky (07.03.07 14:01) [1]
> Если надо, у меня есть оптимизированный вариант сложных
> фильтров (SmoothResize), раза в 2 быстрее.
Очень надо! Буду благодарен, если Вы поделитесь столь ценной вещью!
Sapersky (2007-03-07 14:01:00) [6]Вы определитесь всё-таки, быстро нужно или качественно.
Если, например, требуется реалтайм, то вряд ли получится применить что-либо сложнее билинейной фильтрации. Хотя это зависит от размера картинок, предполагаемых системных требований и т.п.
Практически любые типы фильтров есть в FastLIB:
http://sourceforge.net/project/showfiles.php?group_id=173551
Артефактов (кроме тех, что присущи низкокачественным фильтрам) не замечал.
Если надо, у меня есть оптимизированный вариант сложных фильтров (SmoothResize), раза в 2 быстрее.