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) {