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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.04.2012, 07:42   #1
gusluk
Форумчанин
 
Аватар для gusluk
 
Регистрация: 16.10.2008
Сообщений: 205
По умолчанию Быстрый вывод графики

Занимаюсь моделированием волновых процессов. Встал вопрос с отображением результата расчетов которые представляют матрицу 1000Х1000 точек. Сделал отображение матрицы выводом точек на битмап размером нужные 1000Х1000 точек, рассчитанные значения отображаются цветом. Сначала сделал просто через Pixels[x,y]:=rgb(a,b,c), затем решил ускорить вывод графики и сделал через DIB как описано тут. Теперь появилась необходимость дополнительно отображать еще один параметр в виде стрелок повернутых на определенный угол, а это дополнительные расчеты на их поворот. К тому же DIB работает тока на XP, на семерке ничего не отображается.
Соответственно вопрос, как сделать максимально быстрый вывод картинки?
Использовать OGL, DX, или оставить DIB?
gusluk вне форума Ответить с цитированием
Старый 05.04.2012, 07:52   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я бы OpenGL попробовал.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.04.2012, 10:19   #3
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Я бы ещё сканлайн попробовал.
Вот примерчик от меня http://programmersforum.ru/showpost....&postcount=628

Делать так - берем генерим буферный битмап размером 1000*1000.
Делаем внешний цикл - в нем сканлайн, делаем внутренний цикл - в нем присваивание цвета пикселя согласно данным из Вашего массива в нужный пиксель сканлайненого указателя.
Потом битмап просто блитим (BitBlt/Canvas.Draw) в нужное место

Если будут сложности, пишите, скиньте либо проект, либо демку, я на ней Вам раскатаю это дело, потом код перекинете себе.

По OpenGL могу посоветовать для примера вот такую темку http://programmersforum.ru/showthread.php?t=191857
phomm вне форума Ответить с цитированием
Старый 08.04.2012, 09:34   #4
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от gusluk Посмотреть сообщение
Встал вопрос с отображением результата расчетов которые представляют матрицу 1000Х1000 точек.
...
К тому же DIB работает тока на XP, на семерке ничего не отображается.
Соответственно вопрос, как сделать максимально быстрый вывод картинки?
Использовать OGL, DX, или оставить DIB?
1. Очень странно, что DIB не работает на 7. Вероятнее всего, это не проблемы DIB, а ошибки в Вашей программе.
2. Быстрая графика не может быть попиксельной. Для скорости нужно пользоваться более крупными примитивами.
3. В Вашей задаче применение DirectX или OpenGL я нахожу нерациональным.
4. В подобных задачах я пользуюсь подходом близким к DIB. Я создаю в ОП образ BMP файла, после чего при помощи StretchDIBits отображаю его на экран. Преимущества два:
- я пользуюсь тем способом представления цвета, какой мне удобнее,
- я работаю непосредственно с ОП, не делая лишних вызовов системных функций, которые выполняются сравнительно долго.
s-andriano вне форума Ответить с цитированием
Старый 09.04.2012, 04:15   #5
gusluk
Форумчанин
 
Аватар для gusluk
 
Регистрация: 16.10.2008
Сообщений: 205
По умолчанию

s-andriano, не могли бы Вы привести пример своего подхода?
gusluk вне форума Ответить с цитированием
Старый 09.04.2012, 05:15   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,299
По умолчанию

Может быть вам помогут ассемблерные вставки?
http://www.delphimaster.ru/articles/pixels/
(у меня фрактал рисовался вместо 8-10 минут за 15-30 секунд)
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 09.04.2012, 08:52   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Может быть вам помогут ассемблерные вставки?
самое забавное что там дело то не в вставках в основном.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 09.04.2012, 12:49   #8
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,299
По умолчанию

Пепел Феникса, вам виднее
Когда я использовал эту статью в прошлый раз, то просто скопировал во внешний модуль, не вдумываясь в содержание (да и знаний не было, чтобы разобраться).
Теперь же, увидев тему по быстрой работе с растром, вспомнил и кинул ссылку (мой воспаленный мозг не мог уже в 4 часа трезво анализировать данную статью )
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 10.04.2012, 09:09   #9
gusluk
Форумчанин
 
Аватар для gusluk
 
Регистрация: 16.10.2008
Сообщений: 205
По умолчанию

BDA, спасибо за ссылочку! Сижу разбираюсь что там да как работает.
gusluk вне форума Ответить с цитированием
Старый 10.04.2012, 20:56   #10
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от gusluk Посмотреть сообщение
s-andriano, не могли бы Вы привести пример своего подхода?
В оконной процедуре:
Код:
    WM_PAINT: begin
      dc := BeginPaint (Window, MyPaint);
      GetClientRect(Window,r);
      DrawNewBuffer;
      StretchDIBits(dc,0,0,ScreenWid,ScreenHei,0,0,ScreenWid,ScreenHei,buff,bi, DIB_RGB_COLORS,SRCCOPY);
      EndPaint (Window, MyPaint);
      ReleaseDC (Window, dc);
    end;
DrawNewBuffer заполняет буфер buff и BMP-заголовок bi нужным изображением, которое в точности имитирует формат BMP-файла.
s-andriano вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Visual Basic ... вывод графики Андрюха_ЕШКО Помощь студентам 0 22.04.2011 11:48
Delphi. Вывод графики на форму. Волчица Помощь студентам 1 16.12.2009 22:27
быстрый вывод карты на экран или попиксельное создание бмп angel2c Общие вопросы C/C++ 2 17.12.2007 10:50
таймер и вывод графики Volkogriz Мультимедиа в Delphi 4 08.12.2007 12:11
Вывод графики в DBGrid Saro БД в Delphi 0 20.04.2007 11:39