Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
1-1087989906
Vampiros
2004-06-23 15:25
2004.07.11
Иконка к папке


3-1087370937
Inkarik
2004-06-16 11:28
2004.07.11
Ошибка SQL Builder


1-1087966283
Игорь
2004-06-23 08:51
2004.07.11
Две строки в одной ячейки TStringGrid


8-1082905956
iudjen
2004-04-25 19:12
2004.07.11
image OnMauuseEnter - Leave


14-1088015449
Daniel_
2004-06-23 22:30
2004.07.11
Захват изображения с экрана





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский