Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TImage с быстрым Zoom и Pan [D5, WinXP]


vin ©   (2004-04-22 16:05:00) 

Уважаемые Коллеги!

Я к 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?

Заранее благодарен,
Иван.


Mihey   (2004-04-23 22:14:00) [1]

2 vin:

Graphic32 ( http://www.g32.org). На сайте сама библиотека, в ней стандартно есть рисование линий, прямоугольников и полигонов. Дополнительно там же дополнительный набор для эллипсов и всего остального от канвы.


vin   (2004-04-23 21:20:00) [2]

2Mihey ©
>Юзай продвинутую библиотеку.
Какую??? Подскажи.

2Mantic0re ©
>какой тип изображений ты обрабатываешь (я так догадываюсь, что векторный :) ?
У меня все данные (тип фигуры и координаты) хранятся в собственном объекте. Потом я делаю пересчет и вывод на экран...
Получается - векторный, я не работаю с отдельными пикселями.

>Для оптимального Pan: берешь свой имэйдж расчитываешь видимый прямоугольник и делаешь BitBlt (либо Draw в TBitmap) на экран.
Так вроде и делаю: храню во временном витмапе, а потом через Draw вывожу его на экран... как убыстрить?...

>просто используя алгоритмы отсечения полигонов
Подскажи, где читать...

Спасибо!


Mihey   (2004-04-23 15:48:00) [3]

Особенно примитивы стандартными средствами - трата времени. Юзай продвинутую библиотеку.


Mantic0re   (2004-04-23 10:12:00) [4]

Во 1-х какой тип изображений ты обрабатываешь (я так догадываюсь, что векторный :) ?
Во 2-х:
* Для оптимального Pan: берешь свой имэйдж расчитываешь видимый прямоугольник и делаешь BitBlt (либо Draw в TBitmap) на экран.
* Для оптимального Zoom - важен сам алгоритм масштабирования, т.е. "по соседним", с билинейной интереполяцией..
В самом простом (оптимальном по быстродействию) случае для алгоритма nearest-neighbour на одну точку приходится 1 сдвиг и 2 сложения, поэтому скорость даже на P1 166 будет достаточной 800x600x16 ~50 fps.
Всё выше сказанное справедливо для растровых изображений, для векторных - ты должен отрисовывать масштабированные фигуры сам, просто используя алгоритмы отсечения полигонов..


Наверх

Титульная страница Поиск, карта сайта Написать письмо