|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
18.09.2015, 19:56 | #1 |
Пользователь
Регистрация: 17.01.2010
Сообщений: 45
|
Как ускорить процесс зарисовки изображения из матрицы
Суть проблемы вот в чем. Имею двухмерную матрицу чисел 512х512, числа в матрице в пределах от 800 и до 2500. Далее приравняв максимальное число к белому цвету а минимальное к черному, остальные рассчитываю относительно первых, надо вывести эту матрицу на экран, путем зарисовки пикселей (512х512) соответствующим цветом (от белого к черному). В итоге получится некая серая рябь. Но проблема в том, что зарисовка происходит уж очень медленно, видно как кадр построчно рисуется. Как ускорить данный процесс?? или хотя бы как сделать так, что бы не было видно самого процесса зарисовки, а записать массив цветов каждого пикселя и сразу все вывести разом.
Вот сама функция вывода на экран изображения (переменные min и max глобальные и рассчитываются в другой функции, рисую на Picture Control, к которой привязана переменная m_paint: Код:
|
18.09.2015, 20:26 | #2 |
Старожил
Регистрация: 31.05.2010
Сообщений: 13,543
|
Код:
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder |
18.09.2015, 20:47 | #3 |
Пользователь
Регистрация: 17.01.2010
Сообщений: 45
|
это вообще к чему??? насколько знаю onPaint отвечает за прорисовку, или я не прав??... у меня все рисуется, путем вызова этой функции после открытия файла и записи из него данных в массив.. Насколько я понимаю процесс затормаживается из-за постоянного вызова функции SetPixel, которая работает не столь быстро... а вот как её обойти я не знаю
|
18.09.2015, 20:48 | #4 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,331
|
Скорее вам надо SetDIBitsToDevice...
Само главное заполнить BITMAPINFO структуру, которая описывает ваши данные. А, вам надо сделать массив 512х512 из color элементов, поскольку во время рисования считать уже не получится, надо подсчитывать все заранее. |
18.09.2015, 20:51 | #5 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
http://www.programmersforum.ru/showthread.php?t=155809
I'm learning to live...
|
|
18.09.2015, 21:49 | #6 |
Вредный кошак
Участник клуба
Регистрация: 14.10.2012
Сообщений: 1,159
|
И еще не надо всё сразу на конечный контекст пихать, нарисуйте сначала на подопытном контексте, а уж потом выводите.
|
18.09.2015, 22:30 | #7 |
Пользователь
Регистрация: 17.01.2010
Сообщений: 45
|
Все решил проблему.
решил подобным образом: Код:
Но возникла некая проблемка. Как задать размер пикселя, при прорисовки изображения?? так как рисунок не влазит в отведенную область, да и придется еще работать с более крупными изображениями... вот что бы их масштабировать надо указать размер рисуемого пикселя.. только вот где.. Последний раз редактировалось ashtone9130; 18.09.2015 в 23:20. |
18.09.2015, 23:47 | #8 | ||||
Вредный кошак
Участник клуба
Регистрация: 14.10.2012
Сообщений: 1,159
|
Цитата:
Цитата:
Рисуйте с учетом масштаба. Как вариант, рисуете всё на подопытном контексте, а потом применяете функцию StretchBlt Так по сути, сразу и масштабирование и двойная буферизация. Цитата:
Цитата:
Рисуйте с учетом масштаба. Как вариант, рисуете всё на подопытном контексте, а потом применяете функцию StretchBlt Так по сути, сразу и масштабирование и двойная буферизация. Последний раз редактировалось Stilet; 19.09.2015 в 09:19. |
||||
18.09.2015, 23:54 | #9 | ||
Пользователь
Регистрация: 17.01.2010
Сообщений: 45
|
Цитата:
Никогда с графикой не работал, а ща потребовалось написать программку... вот и изучаю попутно.. а времени на чтение норм литературы нет Цитата:
и не могу понять как применить StretchBlt.. так что бы на экран выводить уже готовое изображение Последний раз редактировалось Stilet; 19.09.2015 в 09:19. |
||
19.09.2015, 09:39 | #10 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,331
|
На висте и далее, при включенном Aero буферизация делается автоматически.
А зачем вам вообще создавать BITMAP, тем более DI типа? На ваш случай есть StretchDIBits |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
как ускорить процесс расстановки checkbox | Sprat | PHP | 1 | 07.04.2012 20:26 |
Ускорить процесс выгрузки из БД | Jl6owa | БД в Delphi | 8 | 29.03.2012 02:13 |
Ускорить процесс | Victor1963 | Помощь студентам | 0 | 15.11.2011 12:06 |
Ускорить процесс. | Victor1963 | Общие вопросы Delphi | 3 | 23.06.2011 21:51 |
Как ускорить попиксельную обработку изображения | Дамир | Общие вопросы .NET | 1 | 02.11.2009 12:40 |