Borland C++ Builder VCL FAQ - Преобразование битового образа в область (регион)
ОГЛАВЛЕНИЕ
Страница 78 из 96
Преобразование битового образа в область (регион)
При создании в C++Builder окон нестандартной формы вам понадобится преобразование битового изображения в область. Это можно сделать с помощью приведенной ниже функции:HRGN TfSettingsForm::BitmapToRegion(TPicture *APicture, TColor ATransparentColor)TPicture *APicture - указатель на изображение, которое будет фоном для вашей формы. TColor ATransparentColor - прозрачный цвет в данном изображении. Пиксели данного цвета "исчезнут", и окно сможет принять самый замысловатый вид.
{
HRGN Result = 0;
for(int y = 0; y < APicture->Height; y++)
{
int x = 0;
while(x < APicture->Width)
{
// Пропускаем прозрачные точки
while((x < APicture->Width) &&
(APicture->Bitmap->Canvas->Pixels[x][y] == ATransparentColor))
x++;
if(x >= APicture->Bitmap->Width)
break;
int XStart = x; // Пропускаем непрозрачные точки
while((x < APicture->Width) &&
(APicture->Bitmap->Canvas->Pixels[x][y] != ATransparentColor))
x++;
// Создаем новый прямоугольный регион и добавляем его к
// региону всей картинки
if(Result == 0)
Result = CreateRectRgn(XStart, y, x, y + 1);
else
CombineRgn(Result, Result, CreateRectRgn(XStart, y, x, y + 1), RGN_OR);
}
// конец оператора while(x < APicture->Width)
}
// конец оператора for(int y = 0; y < APicture->Height; y++)
return Result;
}