1. Создать объект Bitmap. Для этого можно загрузить картинку из ресурса или файла. Можно также создать объект при помощи функции CreateCom-patibleBitmap( ). Вызов этой функции CreateCompati MeBitmap(hdc. right. bottom) приведет к тому, что в памяти будет выделено место для картинки размером right х bottom.

2. Занести этот объект в контекст при помощи функции Sel ectObject (hdcMem. hBi t ). В этом случае объект Bitmap будет аналогом видеобуфера.

3. Заполнить созданную область с дескриптором HBITMAP hBit цветом фона при помощи функции BitBlt(hdcMem. 0. 0. right, bottom. NULL. 200. 200. PATCOPY).

Двойная буферизация Флаг PATC0PY указывает, что прямоугольник в контексте памяти будет закрашен кистью, которая закреплена за принимающим окном. В этом случае контекст источника (вместо него указано значение NULL) и координаты в нем не используются.

4. Использовать функции вывода графических примитивов, указывая в них контекст hdcMem. Разумеется, образ из системной памяти нельзя будет непосредственно отображать на экран, но зато его можно полностью сформировать, а потом быстро скопировать в видеопамять. При этом исчезнут эффекты, обусловленные стиранием экрана и последовательным выводом примитивов.

5. Скопировать данные из системной памяти в видеопамять при помощи функции BitBlt(hdc. 0.0. right, bottom. hdcMem.O. 0. PATCOPY).

Этап очистки фона необходим, потому что функция CreateCompatibleBitmapC) только резервирует в системной памяти место для хранения изображения, но не заполняет память данными. Если не выполнить очистку, то на экран будет выводиться окно, закрашенное случайным образом.

Для создания движущегося изображения необходимо периодически повторять описанную выше последовательность действий. Потребуется готовить в системной памяти новые варианты картинки (кадры), очищать фон, изменять координаты принимающего окна и копировать очередной кадр в видеобуфер. Двойная буферизация, при которой изображение сначала рисуется в системной памяти, а потом копируется в видеобуфер, является характерной особенностью систем динамической машинной графики. Предварительное формирование изображения на невидимой поверхности рисования скрывает от наблюдателя процесс периодического стирания старого кадра и рисования нового.


⇐ Предыдущая| |Следующая ⇒