Создание и использование 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]