Вот пример того, как можно создать и использовать палитру для 256-цветных изображений. Вам, вероятно, необходимо использовать API функции SelectPalette и RealizePalette, в зависимости от того как вы хотите использовать ваше изображение.
procedure TfrmMain.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; |
- Bob Teller [000826]