Форум: "Media";
Текущий архив: 2004.07.11;
Скачать: [xml.tar.bz2];
ВнизTImage с быстрым Zoom и Pan Найти похожие ветки
← →
vin (2004-04-22 16:05) [0]Уважаемые Коллеги!
Я к TImage приделал Zoom In/Out и Pan, но столкнулся с проблеммой быстродействия! (P4 2.8G - Ok!, P3 600M -OOPS???)
1.На входе имею следующие типы: линия, дуга, прямоугольник, окружность... - как-бы стандартные примитивы в количистве порой до нескольки тысяч. Знаю все исходные координаты и типы. Вывожу на канву стандартными ее методами.
2. При zom-e делаю перемасштабирование и отрисовываю ВСЕ (не анализируя, что входит, а что не входит в ClipRect). При pan-e делал даже буферный битмап, и отрисовывал его не пересчитывая каждый раз все координаты - но не сильно помогает. Может надо включить алгоритмы вхождения объекта в ClipRect. Поможет ли?
3. И в общем: Как максимально ускорить отрисовку 2D в Delphi, что использовать, чтобы сделать оптимальный Zoom/Pan?
Заранее благодарен,
Иван.
← →
Mantic0re © (2004-04-23 10:12) [1]Во 1-х какой тип изображений ты обрабатываешь (я так догадываюсь, что векторный :) ?
Во 2-х:
* Для оптимального Pan: берешь свой имэйдж расчитываешь видимый прямоугольник и делаешь BitBlt (либо Draw в TBitmap) на экран.
* Для оптимального Zoom - важен сам алгоритм масштабирования, т.е. "по соседним", с билинейной интереполяцией..
В самом простом (оптимальном по быстродействию) случае для алгоритма nearest-neighbour на одну точку приходится 1 сдвиг и 2 сложения, поэтому скорость даже на P1 166 будет достаточной 800x600x16 ~50 fps.
Всё выше сказанное справедливо для растровых изображений, для векторных - ты должен отрисовывать масштабированные фигуры сам, просто используя алгоритмы отсечения полигонов..
← →
Mihey © (2004-04-23 15:48) [2]Особенно примитивы стандартными средствами - трата времени. Юзай продвинутую библиотеку.
← →
vin (2004-04-23 21:20) [3]2Mihey ©
>Юзай продвинутую библиотеку.
Какую??? Подскажи.
2Mantic0re ©
>какой тип изображений ты обрабатываешь (я так догадываюсь, что векторный :) ?
У меня все данные (тип фигуры и координаты) хранятся в собственном объекте. Потом я делаю пересчет и вывод на экран...
Получается - векторный, я не работаю с отдельными пикселями.
>Для оптимального Pan: берешь свой имэйдж расчитываешь видимый прямоугольник и делаешь BitBlt (либо Draw в TBitmap) на экран.
Так вроде и делаю: храню во временном витмапе, а потом через Draw вывожу его на экран... как убыстрить?...
>просто используя алгоритмы отсечения полигонов
Подскажи, где читать...
Спасибо!
← →
Mihey © (2004-04-23 22:14) [4]2 vin:
Graphic32 (http://www.g32.org). На сайте сама библиотека, в ней стандартно есть рисование линий, прямоугольников и полигонов. Дополнительно там же дополнительный набор для эллипсов и всего остального от канвы.
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2004.07.11;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.03 c