Статья: Работа с регионами в 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)
Загрузка сложных регионов
После того, как битмап будет обработан утилиткой, его можно поместить в приложение как ресурс и загрузить следующим образом: