| Autor |
Nachricht |
Mathematiker
       
Beiträge: 46
Erhaltene Danke: 5
Win Vista, Win 7
Delphi 5
|
Verfasst: So 05.02.12 14:21
Hallo Delphi-Gemeinde,
mein aktuelles Problem besteht darin, dass ich aus einem Image heraus ein monochromes Bitmap speichern möchte.
Zu Beginn wird in das Image ein GIF-Bild geladen. Dieses kann, muss aber nicht, schwarz/weiß sein.
Im gespeicherten, zweifarbigen Bitmap soll aber stets Schwarz und nicht Weiß als Hintergrundfarbe gesetzt werden. Mit
erreiche ich zwar, dass das Bitmap zweifarbig wird, allerdings ist Weiß die Hintergrundfarbe.
Meine Idee mit
bringt auch nichts, ebenso nicht
Hat jemand eine Idee? Vielen Dank schon im voraus.
Beste Grüße
Mathematiker
|
| |
|
|
Werbung ausblenden? Dann registriere Dich kostenlos.
Weitere Gründe für eine Registrierung.
Werbung ausblenden? Dann registriere Dich kostenlos.
Weitere Gründe für eine Registrierung.
|
|
platzwart
       
Beiträge: 1008
Erhaltene Danke: 67
Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
|
Verfasst: So 05.02.12 20:24
Bild anschließend invertieren?
_________________ Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
|
| |
|
|
Mathematiker 
       
Beiträge: 46
Erhaltene Danke: 5
Win Vista, Win 7
Delphi 5
|
Verfasst: So 05.02.12 21:03
platzwart hat folgendes geschrieben : | | Bild anschließend invertieren? |
Danke für die Idee, nur leider bringt es mir nichts.
Die Bitmaps enthalten schwarze Strecken und Kurven, die weiße Bereiche umschließen. Diese sollen anschließend nach dem Vierfarbensatz gefärbt werden.
Aus optischen Gründen sehen weiße Bereiche mit schwarzen Linien irgendwie besser aus, als schwarze mit weißen Rändern.
Grüße
Mathematiker
|
| |
|
|
Martok
      

Beiträge: 2837
Erhaltene Danke: 182
Win 2000, Win XP
Delphi 7, Turbo Delphi Exp.
|
Verfasst: So 05.02.12 22:45
In einem 1-Bit-Bitmap gibt es nur die TColor-Werte $FFFFFF und $000000 (wenn man das mit .Pixels[] abfragt, das macht ja immer RGB draus). Alles was nicht exakt $FFFFFF (weiß) ist wird auf Schwarz gemappt.
Wenn also bei dir der "Hintergrund" schwarz ist, hast du ihn "nicht weiß" gezeichnet
Beim Konvertieren bietet es sich also an, vorher per ScanLine alle Pixel durchzugehen und direkt auf Schwarz/Weiß umzufärben und erst dann zu konvertieren. So gibt's klare Verhältnisse und GDI muss nicht raten.
Oder versteh ich grad das Problem falsch? 
_________________ "The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
Ich code EdgeMonkey -~==~- #ee-lounge in Freenode
Für diesen Beitrag haben gedankt: Mathematiker
|
| |
|
|
Mathematiker 
       
Beiträge: 46
Erhaltene Danke: 5
Win Vista, Win 7
Delphi 5
|
Verfasst: So 05.02.12 23:35
Im Prinzip ist dies mir mit den mehrfarbigen GIFs schon klar. Diese sind auch nicht das Hauptproblem. Die 1-Bit-GIFs sind es.
Im Moment sieht es auch so aus, als ob das Problem von der Art des geladenen GIFs abhängt.
Ist es ein monochromes GIF87, so erfolgt die Umwandlung korrekt, d.h. das gepeicherte Bitmap wird mit schwarzer Hintergrundfarbe gespeichert.
Ist das monochrome GIF aber GIF89, so steht nach dem Laden und anschließenden Speichern im gespeicherten Bitmap Weiß als Hintergrundfarbe.
D.h., es muss mir irgendwie gelingen, das Bitmap unabhängig vom GIF-Format, wie gewünscht, zu speichern.
Beste Grüße
Mathematiker
|
| |
|
|
Perlsau
       
Beiträge: 59
Erhaltene Danke: 4
Win XP pro
Radstudio 2009 pro
|
Verfasst: Mo 06.02.12 21:44
_________________ Die Tränen, die du nicht weinen willst, müssen andere für dich vergießen. (frei nach: Wer nicht leiden will, muß hassen)
|
| |
|
|
Mathematiker 
       
Beiträge: 46
Erhaltene Danke: 5
Win Vista, Win 7
Delphi 5
|
Verfasst: Di 07.02.12 08:59
Vielen Dank für die Tipps.
Ich habe mein Problem gelöst. "Invertieren" ist gut, allerdings nicht das Bitmap an sich, sondern nur die Bitmapdaten, ohne den Bitmap-Header und die Farbpalette zu verändern.
D.h., ich lese die Bitmapdaten in ein Feld und invertiere diese, wenn in der Farbpalette Weiß als 1.Farbe gesetzt ist und nicht Schwarz.
Für mich war neu, dass es von einem 1-Bit-Bitmap zwei verschiedene Typen gibt. Steht in der Palette Weiß aus Platz 1, so werden weiße Bildpunkte mit Bit = 0 kodiert, ist Schwarz die 1.Farbe, wird ein weißer Bildpunkt mit Bit = 1 gespeichert.
Beste Grüße
Mathematiker
|
| |
|
|
|