Создание и использование 256 цветной палитры

Пример создания и применения палитры для 256-цветных изображений. Вам нужны API-функции SelectPalette или RealizePalette, в зависимости от того, как вы предполагаете использовать изображение.

procedure TForm1.MakePalette(forBitMap: TBitMap);
var
  pNewPal: PLogPalette;
  lSize: LongInt;
  nCntr: Byte;
begin
  lSize := SizeOf(TLogPalette) + SizeOf(TPaletteEntry) * 256;
  try
    GetMem(pNewPal, lSize);
    pNewPal^.palNumEntries := 256;
    pNewPal^.palVersion := $300;
{$R-}{ выключаем контроль допустимого диапазона }
{ создаем данные палитры... }
    for nCntr := 0 to 254 do begin
      pNewPal^.palPalEntry[nCntr].peRed := nCntr + 20;
      pNewPal^.palPalEntry[nCntr].peGreen := nCntr + 20;
      pNewPal^.palPalEntry[nCntr].peBlue := nCntr + 20;
      pNewPal^.palPalEntry[nCntr].peFlags := pc_nocollapse;
    end;
{$R+}{ включаем контроль допустимого диапазона }
{ удаляем старый hPal; предохраняемся от утечки памяти }
    DeleteObject(hPal);
{ создаем новую палитру на основе новых значений }
    hPal := CreatePalette(pNewPal^);
{ назначаем новую палитру }
    forBitMap.Palette := hPal;
  finally
    FreeMem(pNewPal, lSize);
  end;
end;
[News Group]