|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
19.04.2012, 00:01 | #1 |
Пользователь
Регистрация: 24.02.2010
Сообщений: 19
|
Правильная двойная буфиризация.
Как правильно осуществить двойную буферизацию.Из литературы,форумов следует, что надо создать контекст в памяти через функцию CreateCompatibleDC рисовать в нём, а затем через блитинг(bitblt) копировать в основной контекст. И в основном я вижу такой способ , причём везде. Но есть одно, но посмотрите на картинки
Таким способом получается изображение,если всё рисовать всё прямо в контекст отображения Как мы видим всё прорисованно, изображение цветное, всё гуд, всё замечательно. А вот пример с двойной буферизацией Как видим тоже всё замечательно.Все изображения на своих местах, но изображение которое я предворительно отобразил с помощью блитинга в контекст памяти в при выводе на экран представляет чёрный прямоугольник.Тоесть пропорции сохраняются а самого изображения почему то нет. Перелопатил кучу литературы и решил написать сюда может кто сталкивался с подобным? |
19.04.2012, 00:07 | #2 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
на код надо смотреть.
кстати буферизация же есть еще через формат пикселя, см SwapBuffers и флаг формата пикселя PFD_DOUBLEBUFFER. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
19.04.2012, 00:53 | #3 | |
Пользователь
Регистрация: 24.02.2010
Сообщений: 19
|
Цитата:
Вобщем код не на си но думаю разобраться можно )) Эта процедура создаёт совместимый контекст с изображением и отображает его в переданный в параметрах контекст. Image proc hWin:HWND,mainHdc,hdc:HDC LOCAL hBmp,hOldBmp:HBITMAP,newHdc:HDC LOCAL rect:RECT mov hBmp,FUNC(LoadBitmap,hInstance,IDB_ BMP) mov newHdc,FUNC(CreateCompatibleDC,main Hdc) mov hOldBmp,FUNC(SelectObject,newHdc,hB mp) invoke GetClientRect,hWin,addr rect invoke BitBlt,hdc,1,1,rect.right,rect.bott om,newHdc,0,0,SRCCOPY invoke DeleteObject,FUNC(SelectObject,newH dc,hOldBmp) invoke DeleteDC,newHdc ret Image endp Это код сообщения WM_PAINT LOCAL ps:PAINTSTRUCT LOCAL hdcNew:HDC LOCAL hBmpOld:HBITMAP invoke BeginPaint,hWin,addr ps mov hdcNew,FUNC(CreateCompatibleDC,ps.h dc) mov hBmpOld,FUNC(SelectObject,hdcNew,FU NC(CreateCompatibleBitmap,hdcNew,ps .rcPaint.right,ps.rcPaint.bottom)) invoke Image,hWin,ps.hdc,hdcNew invoke BitBlt,ps.hdc,0,0,ps.rcPaint.right, ps.rcPaint.bottom,hdcNew,0,0,SRCCOP Y invoke DeleteObject,FUNC(SelectObject,hdcN ew,hBmpOld) invoke DeleteDC,hdcNew invoke EndPaint,hWin,addr ps |
|
19.04.2012, 00:57 | #4 | ||
Форумчанин
Регистрация: 11.07.2010
Сообщений: 914
|
Цитата:
PS. Пока писал, появился код автора. PPS.Так и есть - монохромный Цитата:
Последний раз редактировалось EUGY; 19.04.2012 в 01:25. |
||
19.04.2012, 02:34 | #5 |
Пользователь
Регистрация: 24.02.2010
Сообщений: 19
|
Я тоже в какой то момент думал что может быть изображение монохромным, что-то пробовал менять, думал уже через Dib-ы начать делать )))
Спасибо за ответы.Задача решена.Всё нормально теперь отображается ) |
19.04.2012, 09:18 | #6 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
кстати ТС, зачем вы каждую прорисовку грузите картинку из файла?
это достаточно сделать один раз в WM_CREATE(а то и тупо в коде программы, а не обработчика сообщений) и уничтожить в WM_DESTROY. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Двойная буферизация в dotNet | DimaTs | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 0 | 13.12.2011 22:26 |
Двойная авторизация | Ribun | Microsoft Office Access | 2 | 15.07.2011 12:53 |
Двойная шкала на диаграмме | mephist | Microsoft Office Excel | 1 | 24.03.2010 00:13 |
Двойная номерация страниц | litvin22 | Microsoft Office Word | 0 | 18.05.2009 15:04 |
Двойная буферизация | volod3000 | Общие вопросы Delphi | 4 | 27.03.2009 00:08 |