So, hab jetzt mal ein bisschen rumgebastelt.
Delphi-Quellcode:
var
MyArray:
array[0..255]
of TColor;
// Farbpalette als Array
lpPal: PLOGPALETTE;
// Farbpalette
{...}
procedure TForm1.FormCreate(Sender: TObject);
var i: byte;
begin
For i:=0
to 255
do
MyArray[i] :=
RGB(i,i,i);
// Array mit 256 Grauwerten, also 8 Bit Graustufung
end;
procedure TForm1.Button1Click(Sender: TObject);
var i: byte;
begin
GetMem(lpPal, SizeOf(TLOGPALETTE) +(255 * SizeOf(TPALETTEENTRY)));
FillChar(lpPal^, SizeOf(TLOGPALETTE) +(255 * SizeOf(TPALETTEENTRY)),#0);
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;
CreatePalette(lpPal^);
FreeMem(lpPal, SizeOf(TLOGPALETTE) +(255 * SizeOf(TPALETTEENTRY)));
end;
procedure TForm1.Button2Click(Sender: TObject);
var STREAM: TStream;
begin // Palette in Datei speichern
STREAM := TFileStream.Create('
C:\test.dat', fmCreate
or fmOpenWrite);
STREAM.
Write(lpPal^, SizeOf(TLOGPALETTE) +(255 * SizeOf(TPALETTEENTRY)));
STREAM.Free;
end;
Ich erstelle also eine 8 Bit Farbpalette mit allen Grauwerten.
Wenn ich mir dann die Palette in der fertige Datei anschaue (hab ein Programm, mit dem man Farbpaletten editieren kann, diese werden dann in *.dat Dateien gespeichert), kommt das bei raus: (Bild im Anhang).
Merkwürdig sind die ersten 5 Farben, der Rest sieht eigentlich ganz gut aus.
Hat jemand eine Idee, woran das liegen könnte?
//Edit:
Die Dateien vom Programm sind alle 1024 Byte groß, meine Datei ist 1028 Byte groß.
Hat das damit evtl. was zu tun?
Außerdem ist der letzte Farbwert nicht reines Weiß, sondern einer niederiger:
254, 254, 254
Warum?