Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.05.2012, 10:46   #1
SNUPY
Форумчанин
 
Регистрация: 15.02.2008
Сообщений: 621
Вопрос Отриосвка изображений по слоям

Доброго времени суток!
Возникла задача реализации вывода изображений по слоям. На данный момент реализовал механизм через потомки bitmap'ов (добавил атрибут маски), которые последовательно отрисовываются с применением маски (два последовательных bitblt на SRCPAINT и SRCAND) на другом битмапе, который в свою очередь выводится на канве control'a (strechblt).
По мимо всего выше сказанного слои могут быть векторными.
Под векторным слоем я имею введу то, что на нем отрисовываются точки и линии у которых видовой размер не зависит от примененного масштаба ко всей картине (такое можно наблюдать в ГИС системах: когда меняешь масштаб отображения, надписи остаются того же размера).
Собственно к чему я это все рассказываю? Дело в то, что при работе с более чем 3-мя 4-мя слоями, среди которых 1-2-и векторых, скорость работы приложения (при масштабировании, при добавлении точек) падает.

На данном этапе собственного развития вижу два пути выхода из ситуации: реализация отрисовки от верхнего слоя к нижнему с применением регионов или же переход на DirectX, OpenGL рендоры.

Может кто-нибудь поделится со своими виденьями в решении проблемы.
Заранее спасибо!
Помог? Ну так нажми на весы!
SNUPY вне форума Ответить с цитированием
Старый 12.05.2012, 11:11   #2
vasiliyrob
Новичок
Джуниор
 
Регистрация: 09.05.2012
Сообщений: 4
По умолчанию

Мне нравится graphics32 (http://graphics32.org/wiki/), для него есть модуль работы с векторной графикой http://www.angusj.com/delphi/gr32_lines.php
Есть встроенное сглаживание, и очень высокая скорость работы.
Можно использовать openGL если комбинирование слоев не очень специфическое.
vasiliyrob вне форума Ответить с цитированием
Старый 12.05.2012, 11:13   #3
vasiliyrob
Новичок
Джуниор
 
Регистрация: 09.05.2012
Сообщений: 4
По умолчанию

Если нужно очень сложное и очень специфическое вычисление - стоит посмотреть в сторону OpenCL
vasiliyrob вне форума Ответить с цитированием
Старый 12.05.2012, 12:15   #4
SNUPY
Форумчанин
 
Регистрация: 15.02.2008
Сообщений: 621
По умолчанию

Цитата:
Сообщение от vasiliyrob Посмотреть сообщение
Если нужно очень сложное и очень специфическое вычисление - стоит посмотреть в сторону OpenCL
Я бы сказал: вычисление, которое можно представить в виде большого однородного массива данных.

Цитата:
Сообщение от vasiliyrob Посмотреть сообщение
Мне нравится graphics32 (http://graphics32.org/wiki/), для него есть модуль работы с векторной графикой http://www.angusj.com/delphi/gr32_lines.php
Есть встроенное сглаживание, и очень высокая скорость работы.
Можно использовать openGL если комбинирование слоев не очень специфическое.
Про это либу я читал. И я принципиально не делал на ней т.к. боялся пригвоздить логику приложения к ней. Т.е. я бы вряд ли разрабатывал свои классы интерфейсы для работы с графикой, если бы ее использовал. А тут заложена уже более менее гибкая архитектура приложения. Плюс в будущем в работе приложения по любому нужно будет прикрутить вывод 3в моделей. Конечно я согласен, что сделал ошибку, что не сразу начал делать под DirectX или OpenGL.
Помог? Ну так нажми на весы!

Последний раз редактировалось SNUPY; 12.05.2012 в 14:39.
SNUPY вне форума Ответить с цитированием
Старый 12.05.2012, 14:24   #5
vasiliyrob
Новичок
Джуниор
 
Регистрация: 09.05.2012
Сообщений: 4
По умолчанию

все изображения представляются в виде большого однородного массива данных.
vasiliyrob вне форума Ответить с цитированием
Старый 13.05.2012, 23:08   #6
SNUPY
Форумчанин
 
Регистрация: 15.02.2008
Сообщений: 621
По умолчанию

Тема актуальна
Помог? Ну так нажми на весы!
SNUPY вне форума Ответить с цитированием
Старый 14.05.2012, 18:33   #7
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Я так понимаю, настоящего "вектора", требующего растеризации, нет.
Хотелось бы узнать характерные размеры изображений (в пикселях), что такое масштабирование, какие операции происходят при добавлении точки, а также что подразумевается под скоростью работы и ее характерные величины.
s-andriano вне форума Ответить с цитированием
Старый 14.05.2012, 18:57   #8
SNUPY
Форумчанин
 
Регистрация: 15.02.2008
Сообщений: 621
По умолчанию

Цитата:
Сообщение от s-andriano Посмотреть сообщение
Я так понимаю, настоящего "вектора", требующего растеризации, нет.
Хотелось бы узнать характерные размеры изображений (в пикселях), что такое масштабирование, какие операции происходят при добавлении точки, а также что подразумевается под скоростью работы и ее характерные величины.
С радостью отвечу вам.

Начну с начала. "характерные размеры изображений" — Любые.
"что такое масштабирование" — когда пользователь увеличивает картинку для просмотра, соответственно меняется размер у растровых слое в а у векторного меняются лишь точки расположения точек а сами пиктограмки остаются неизменными.
"какие операции происходят при добавлении точки" - рисуем битмап точки, перерисуем слой с этой точкой, перерисуем видовой битмап, выводим видовой слой.

"также что подразумевается под скоростью работы" — ниже 24 к/с
Помог? Ну так нажми на весы!
SNUPY вне форума Ответить с цитированием
Старый 14.05.2012, 20:21   #9
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от SNUPY Посмотреть сообщение
Начну с начала. "характерные размеры изображений" — Любые.
Это несерьезно.
Картинка в 500 Мп - это еще не "любая", но уже будет тормозить по-любому.
Понятно, что программа должна работать, минимум, с любым изображением, помещающимся в память, а при наличии особых требований - и без такого ограничения.
Но мне интересно, при каких характерных размерах начинают появляться "тормоза". Ну, хотя бы, чтобы прикинуть, есть ли еще ресурс для оптимизации или... что-то надо радикально менять.
Цитата:
"что такое масштабирование" — когда пользователь увеличивает картинку для просмотра, соответственно меняется размер у растровых слое в а у векторного меняются лишь точки расположения точек а сами пиктограмки остаются неизменными.
"увеличивает" - значит, предполагается, что масштаб больше или равен 1?
Если так, возможно, стоит настраиваться на использование Direct3D или OpenGL - GPU очень эффективно справляется с масштабированием.
Цитата:
"какие операции происходят при добавлении точки" - рисуем битмап точки, перерисуем слой с этой точкой, перерисуем видовой битмап, выводим видовой слой.
Другими словами, все перерисовывается с 0.
Здесь тоже есть простор для оптимизации, чтобы уменьшить долю перерисовываемых фрагментов.
Цитата:
"также что подразумевается под скоростью работы" — ниже 24 к/с
В принципе, ясно. Но непонятно, почему именно 24. Для современного компьютерного монитора она не является делителем частоты кадров.
s-andriano вне форума Ответить с цитированием
Старый 14.05.2012, 20:51   #10
SNUPY
Форумчанин
 
Регистрация: 15.02.2008
Сообщений: 621
По умолчанию

Цитата:
Если так, возможно, стоит настраиваться на использование Direct3D или OpenGL - GPU очень эффективно справляется с масштабированием.
Вот и я об этом думаю... т.к. фактически пишу на голом WinAPI... значит такие придется браться за более радикальные методы... Жаль, что DirectDraw официально умер придется делать Direct3D а там... одна развлекуха особенно если учесть, что придется растр выводить как текстуру...

Цитата:
Но непонятно, почему именно 24
хотел сказать, что глазу заметно

Цитата:
Другими словами, все перерисовывается с 0.
Вот тут уже если только в двух направлениях... либо делать регионами или увеличивать объем сжираемой памяти.

Цитата:
Это несерьезно.
Картинка в 500 Мп - это еще не "любая", но уже будет тормозить по-любому.
Разумеется имеется введу в пределах разумного.
Помог? Ну так нажми на весы!
SNUPY вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка изображений на С AshMash Общие вопросы C/C++ 0 31.01.2011 19:13
вставка изображений abastrikov Microsoft Office Excel 0 23.12.2010 14:38
заливка изображений kirosin PHP 5 27.06.2010 18:46