Borland C++ Builder VCL FAQ - Преобразование битового образа в область (регион)

ОГЛАВЛЕНИЕ


Преобразование битового образа в область (регион)

При создании в C++Builder окон нестандартной формы вам понадобится преобразование битового изображения в область. Это можно сделать с помощью приведенной ниже функции:
HRGN TfSettingsForm::BitmapToRegion(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;
  }
TPicture *APicture - указатель на изображение, которое будет фоном для вашей формы. TColor ATransparentColor - прозрачный цвет в данном изображении. Пиксели данного цвета "исчезнут", и окно сможет принять самый замысловатый вид.