HBITMAP hBitMapS: //Исходная картинка.

HOC hdcMemS: //Контекст памяти с исходной картинкой.

Р pDO: //Адрес графических данных картинки, смешанной с фоном

HBITMAP hBitMapD; //Картинка, смешанная с фоном.

HDC hdcMemD: //Контекст памяти картинки, смешанной с фоном.

BITMAP bitmap: //Параметры картинки.

RdTSC SpeedCPU; //Результаты измерения скорости процессора, static HDC hdc; //Контекст изображения, static HBITMAP OldBitMap:

static WORD N - 256; //Количество тактов обработки. C0L0RREF cFon - RGB(0.0.05); //При регистрации оконного класса задает цвет фона static C0L0RP ColorKey - {0.0.0}; //цветовой ключ.

Непосредственный доступ к графическим данным

int Tau; //Такт обработки. Чтобы узнать суммарное время выполнения 2*N //тактов обработки, сюда следует занести 0.

//Для достижения максимальной скорости все используемые объекты создаются

//при инициализации приложения функцией StartTestO и уничтожаются при его

//завершении.

void StartTestCHWND hWnd)
{

SpeedCPU-Calibrate (lOOO.hWnd); //Измерение скорости процессора

hdc - GetDC(hWnd);
hdcMemS - CreateCompatibleDC(hdc);
hdcMemD - CreateCompatibleDC(hdcMemS);
hBitMapS - (HBITMAP) LoadImage(NULL."B0P0TAl.bmp".
IMAGE_BITMAP.0.0.LR_L0ADFR0MFILE|LR_CREATEDIBSECTION): hBitMapD - (HBITMAP) LoadImage(NULL."BOPOTAl.brnp\
IMAGEJITMAP.0.0.LR_LOADFROMFILE|LR_CREATEDIBSECTION); HBITMAP OldBitmap - (HBITMAP) SeiectObject(hdcMemS.hBitMapS); SelectObject(hdcMemD.hBitMapD); GetObject(hBi tMapS.si zeof(BITMAP).&bi tmap);

pSO - (P) bitmap.bmBits: //Указатель на графические данные источника. GetObject(hBi tMapD.si zeof(BITMAP).&bi tmap);

pDO - (P) bitmap.bmBits; //Указатель на графические данные приемника. }

Уничтожение объектов выполняется функцией EndTest (), которая не содержит ничего для нас нового. В листинге 17.6 приведена функция DirectBitMapCC), использующая для корректировки изображения, хранящегося в DIB-формате, вместо функций чтения GetPi xel () и записи SetPi xel () доступ к массиву с кодами цвета через указатель.

Листинг 17.6

int DirectBitMapC (HDC hdcMemS.HDC hdcMemD.int t. int x.int y) {

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