Einzelnen Beitrag anzeigen

Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#12

Re: Icons mit Delphi erstellen

  Alt 13. Mai 2006, 18:56
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?
Miniaturansicht angehängter Grafiken
palette_859.png  
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat