Главная страница
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.023 c
1-1088257382
{beginner}
2004-06-26 17:43
2004.07.11
Как создать поток в run-time?


3-1087319316
Дэвид
2004-06-15 21:08
2004.07.11
Трехзвенная архитектура TDCOMConnection


14-1087994131
Vlad Oshin
2004-06-23 16:35
2004.07.11
Странно... MASM32, глюк...


4-1086168939
panov
2004-06-02 13:35
2004.07.11
HDC, использование в OnPaint


6-1084597155
foger
2004-05-15 08:59
2004.07.11
Работа с сетью