Вниз
Скачать: CL | DM;

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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.021 c
1-1088141829
Lexa
2004-06-25 09:37
2004.07.11
в спящем режиме таймер не пашет


11-1076781047
BorisMor
2004-02-14 20:50
2004.07.11
Hint (Tooltip) для ToolBar а


1-1088581790
chistyakov
2004-06-30 11:49
2004.07.11
Процедурные типы.


3-1087276044
query
2004-06-15 09:07
2004.07.11
1 234 567,000 -->>> 1234567


14-1088109971
Ygeorchic
2004-06-25 00:46
2004.07.11
Картинки на тему: Химия, Физика, Математика...




   Наверх