Главная » Как работать с палитрой в Delphi?
На форме установлен
 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; Категория: Языки программирования | Просмотров: 209