Borland C++ Builder FAQ - Преобразование битового изображения из цветного в 256 градаций серого

ОГЛАВЛЕНИЕ


Преобразование битового изображения из цветного в 256 градаций серого

// Преобразование осуществляется следующей функцией:
void SetBitmapPaletteToGreyScale(Graphics::TBitmap *pBitmap)
{
    LOGPALETTE *pal;
    HPALETTE hpal;
    int i;
    int PaletteSize; //Size of the palette buffer
    pBitmap->PixelFormat = pf8bit;
    pal = NULL;
    PaletteSize = sizeof(TLogPalette) + (sizeof(TPaletteEntry) * 255);
    pal = (LOGPALETTE *) malloc(PaletteSize);
    pal->palVersion = 0x300;
    pal->palNumEntries = 256;
    for (i = 0 ; i <= 255; i++)
    {
      pal->palPalEntry[i].peRed = i;
      pal->palPalEntry[i].peGreen = i;
      pal->palPalEntry[i].peBlue = i;
      pal->palPalEntry[i].peFlags = PC_NOCOLLAPSE;
    }
    hpal = CreatePalette(pal);
    if(hpal != 0) pBitmap->Palette = hpal;
    free(pal);
}