Moin,
zwei Farbwerte in einer Palette würde ich so vertauschen:
Delphi-Quellcode:
procedure SwapPaletteEntries(
var pe:
array of TPaletteEntry; index1, index2: Integer);
var
peTemp: TPaletteEntry;
begin
if index1 <> index2
then
begin
peTemp :=
pe[index1];
pe[index1] :=
pe[index2];
pe[index2] := peTemp;
end;
end;
procedure TDemoForm.SwapButtonClick(Sender: TObject);
const
PAL_ENTRIES = 256;
var
lp: PLogPalette;
i, n, lpSize: Integer;
begin
lpSize := SizeOf(TLogPalette) + Pred(PAL_ENTRIES) * SizeOf(TPaletteEntry);
GetMem(lp, lpSize);
lp.palVersion := $300;
lp.palNumEntries := PAL_ENTRIES;
with Image.Picture.Bitmap
do
begin
n := GetPaletteEntries(Palette, 0, PAL_ENTRIES, lp.palPalEntry);
if n > 0
then
begin
SwapPaletteEntries(lp.palPalEntry, 0, 1);
Palette := CreatePalette(lp^);
end;
end;
FreeMem(lp, lpSize);
Image.Invalidate;
end;
Getippt und nicht getestet.
Grüße vom marabu