Einzelnen Beitrag anzeigen

Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#1

Palette eines monochromen TBitmap ändern / "reparieren"

  Alt 8. Dez 2010, 22:22
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
Alex Winzer
  Mit Zitat antworten Zitat