Einzelnen Beitrag anzeigen

marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Paletteneinträge vertauschen?

  Alt 5. Apr 2008, 11:02
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
  Mit Zitat antworten Zitat