Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.11;
Скачать: 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 вся ветка

Текущий архив: 2004.07.11;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.046 c
3-1087286955
kalishenko
2004-06-15 12:09
2004.07.11
Связь контролов в DLL и IB компонент проложения


3-1086879429
Subdigger
2004-06-10 18:57
2004.07.11
dbms_output


11-1074854211
DDA
2004-01-23 13:36
2004.07.11
RunTime BitBtn.caption:=chr(255) не отображается


14-1087942309
Феликс
2004-06-23 02:11
2004.07.11
Георгий Ярцев: "Мы успешно съездили на Евро-2004"


4-1086092265
Андрей Сенченко
2004-06-01 16:17
2004.07.11
К вопросу по ALT-F4 и прочем