Hallo,
ich verwende in einem Programm monochrome Bitmaps. Diese werden als png-Dateien gespeichert und das wiederum scheint Probleme mit der Palette mit sich zu bringen. Grundsätzlich sind die Farben schwarz und weiß. Manchmal aber wird eine Farbe zu rot (128, 0, 0). Ich habe keine Ahnung warum.
Meine Idee ist nun, die Palette mit den 2 Einträgen zu laden. Ich prüfe, ob Eintrag null schwarz ist, falls ja, wird Eintrag zwei ggf. auf Weiß gesetzt. Falls Eintrag null weiß ist, wird Eintrag zwei ggf. auf Schwarz gesetzt. Soviel zur Theorie und hier mein Code:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
Var
Colors :
Array [0..1]
Of COLORREF;
Begin
With TBitmap.Create
Do
Try
LoadFromFile('
C:\Seite_0006.bmp');
GetPaletteEntries(Palette, 0, 2, Colors[0]);
// aktuelle Palette laden
If Colors[0] =
rgb(0, 0, 0)
Then // Schwarz an Nr. 1 gefunden
Begin
ShowMessage('
Schwarz an Nr. 1 gefunden.');
If Colors[1] <>
rgb(255, 255, 255)
Then // kein Weiß an Nr. 2
Begin
ShowMessage('
Kein Weiß an Nr. 2 gefunden');
Colors[1] :=
rgb(255, 255, 255);
// -> Weiß machen
End;
End;
If Colors[0] =
rgb(255, 255, 255)
Then // Weiß an Nr. 1 gefunden
Begin
ShowMessage('
Weiß an Nr. 1 gefunden.');
If Colors[1] <>
rgb(0, 0, 0)
Then // kein Schwarz an Nr. 2
Begin
ShowMessage('
Kein Schwarz an Nr. 2 gefunden.');
Colors[1] :=
rgb(0, 0, 0);
// -> Schwarz machen
End;
End;
SetPaletteEntries(Palette, 0, 2, Colors[0]);
// neue Palette setzen
SaveToFile('
C:\Seite_0006_korrigiert.bmp');
Finally
Free;
End;
End;
Leider sieht das Ergebnis genauso Schwarz/rot aus, wie das Ausgangsbild. Was mache ich da falsch?
Ich habe die Ergebnisse von
GetPaletteEntries
und
SetPaletteEntries
geprüft und mir wird jeweils eine 2 angezeigt. Laut Online-Hilfe würde im Fehlerfall eine 0 ausgegeben werden. Es kommen auch die Messages wie geplant...
Gruß, Alex