Непосредственный доступ к графическим данным Напомним, что растровая картинка в системной памяти подобна участку видеопамяти, хранящему образ рабочей области окна. В область памяти, хранящую картинку, можно выводить графические примитивы функциями GDI- и эту картинку можно скопировать на экран функцией BitBltC).

Вывод примитивов и копирование участков картинки работает при хранении изображения как в DIB- так и в DDB-формате. Это можно использовать для наложения изображений на картинку или ее редактирования. Допустим, при запуске приложения необходимо выводить изображение, которое медленно возникает, постепенно проявляясь на черном фоне, а потом так же плавно темнеет и исчезает. Это можно сделать при помощи функции GDIBitMap(), которая решает задачу, умножая компоненты цвета каждой точки на постоянные коэффициенты kB, kG, kR. (Этот и последующие примеры данного раздела находятся в проекте ЗаставкаВМР.)

С целью разделения процессов формирования изображения и пересылки его на экран удобно создать два контекста памяти. В контекст hdcMemS перед вызовом функции заносится загруженная из файла исходная картинка, а контекст hdcMemD связан с битовой картой, в которую функция запишет обработанное изображение.

Функция должна не только формировать изображение, но и выводить его на экран. Тогда ей необходимы параметры х, у для задания позиции картинки, как показано ниже:

GDIBitMapCHDC hdcMemS.HDC hdcMemD.
double kB.double kG.double kR.int x.int y)

Для медленного проявления картинки время ее обработки и пересылки на экран не должно превышать 50 мс. Отображение заставки может совмещаться с выполнением других функций приложения. Поэтому необходимо добиться максимальной скорости обработки изображения. Вспомнив, что при хранении в DDB-формате данные пересылаются на экран с использованием аппаратного ускорения, попробуем решить задачу, загрузив изображения из файла Bl.bmp в ап-паратно-зависимой форме, как показано в листинге 17.3.

Листинг 17.3

hBitMapS - (HBITMAP)Loadlmage(NULL."Bl.bmp".IMAGE_BITMAP.0.0.LR_LOADFROMFILE); hBitMapD - (HBITMAP)Loadlmage(NULL."Bl.bmp",IMAGE_BITMAP.0.0,LR_LOADFROMFILE);

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