Статья: Работа с регионами в Visual C++

{

BYTE jRed = pPixels[p+2];

BYTE jGreen = pPixels[p+1];

BYTE jBlue = pPixels[p+0];

if (jRed == jTranspR && jGreen == jTranspG && jBlue == jTranspB)

{

// удаляем прозрачный цвет из региона

hTmpRgn = CreateRectRgn(x,y,x+1,y+1);

CombineRgn(hRgn, hRgn, hTmpRgn, RGN_XOR);

DeleteObject(hTmpRgn);

}

// следующийпиксель

p+=3;

}

}

// освобождаем пиксели

delete pPixels;

// возвращаем регион

return hRgn;

}

Как видно из кода, сперва создаётся квадратный регион такого же размера как и битмап, переданный в функцию как параметр. Затем происходит сканирование каждого пикселя и, если находится пиксель такого же цвета как и указанный, то этот пиксель исключается из региона.

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

Скачать RegionCreator - 19Кб

Запускается эта утилитка следующим образом:

regioncreator < bitmap.bmp > < r > < g > < b >

bitmap.bmp: сам битмап

r,g,b : прозрачный цвет (в десятичном виде: 255 255 255)

Загрузка сложных регионов

После того, как битмап будет обработан утилиткой, его можно поместить в приложение как ресурс и загрузить следующим образом:

К-во Просмотров: 501
Бесплатно скачать Статья: Работа с регионами в Visual C++