Hallo,
Du erstellst in der einen Methode eine Palette und zerstörst diese wieder. In der anderen Methode speicherst Du die Palette, die aber gar nicht mehr existiert.
Übrigens legst Du mit CreatePalette ein Paletten-Objekt an, speicherst das
Handle aber nicht. Erstens musst Du zum Speichern einer Palette kein Paletten.Objekt erstellen (das brauchst Du nur, wenn Du die Palette für eine Graphik verwenden willst), und zweitens erzeugst Du damit ein Speicherleck.
Versuchs mal so:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
I: Byte;
STREAM: TStream;
begin
// Speicher anfordern
GetMem(lpPal, SizeOf(TLOGPALETTE) +(255 * SizeOf(TPALETTEENTRY)));
// Palette füllen
lpPal^.palVersion := $300;
lpPal^.palNumEntries := 256;
for i:=0 to 255 do
begin // erstelle die Farbpalette aus MyArray
lpPal^.palPalEntry[i].peRed := GetRValue(ColorToRGB(MyArray[i]));
lpPal^.palPalEntry[i].peGreen:= GetGValue(ColorToRGB(MyArray[i]));
lpPal^.palPalEntry[i].peBlue := GetBValue(ColorToRGB(MyArray[i]));
end;
// Palette speichern
STREAM := TFileStream.Create('C:\test.dat', fmCreate or fmOpenWrite);
STREAM.Write(lpPal^, SizeOf(TLOGPALETTE) +(255 * SizeOf(TPALETTEENTRY)));
STREAM.Free;
// Speicher freigeben
FreeMem(lpPal, SizeOf(TLOGPALETTE) +(255 * SizeOf(TPALETTEENTRY)));
end;
Zu Deinem Edit:
Das Programm möchte anscheinend nur die Palettendaten, Du speicherst aber ja vorne noch Verwaltungsinformationan (Palettenversion...).
Speichere doch einfach nur die Paletteneinträge:
STREAM.Write(lpPal^.palPalEntry[0], (256 * SizeOf(TPALETTEENTRY)));
Gruß
xaromz