timage и видна картинка (*.bmp файл), как изменить у
него палитру цветов ?
Палитра в tbitmap и tmetafile доступна через property palette.
Если палитра имеется (что совсем необязательно), то palette<>0:
procedure tmain.bitbtnclick(sender: tobject);
var
palette : hpalette;
palettesize : integer;
logsize: integer;
logpalette: plogpalette;
red : byte;
begin
palette := image.picture.bitmap.releasepalette;
// здесь можно использовать просто image.picture.bitmap.palette, но я не
// знаю, удаляются ли ненужные палитры автоматически
if palette=0 then exit; //Палитра отсутствует
palettesize := 0;
if getobject(palette, sizeof(palettesize), @palettesize) = 0 then exit;
// Количество элементов в палитре = palettesize
if palettesize = 0 then exit; // палитра пустая
// определение размера палитры
logsize := sizeof(tlogpalette) + (palettesize - 1) * sizeof(tpaletteentry);
getmem(logpalette, logsize);
try
// заполнение полей логической палитры
with logpalette^ do begin
palversion := $0300; palnumentries := palettesize;
getpaletteentries(palette, 0, palettesize, palpalentry);
// делаете что нужно с палитрой, например:
red := palpalentry[palettesize-1].pered;
edit1.text := 'Красная составляющего последнего элемента палитры ='+inttostr(red);
palpalentry[palettesize-1].pered := 0;
//.......................................
end;
// завершение работы
image.picture.bitmap.palette := createpalette(logpalette^);
finally
freemem(logpalette, logsize);
// я должен позаботиться сам об удалении released palette
deleteobject(palette);
end;
end;