Entwickler-Ecke
Multimedia / Grafik - Monochrom-Bitmap
Mathematiker - So 05.02.12 14:21
Titel: Monochrom-Bitmap
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
Delphi-Quelltext
1: 2:
| image1.Picture.Bitmap.PixelFormat := pf1bit; image1.Picture.savetofile(dateiname); |
erreiche ich zwar, dass das Bitmap zweifarbig wird, allerdings ist Weiß die Hintergrundfarbe.
Meine Idee mit
Delphi-Quelltext
1:
| image1.Picture.Bitmap.transparentcolor := clblack; |
bringt auch nichts, ebenso nicht
Delphi-Quelltext
1:
| image1.Picture.Bitmap.monochrome := true; |
Hat jemand eine Idee? Vielen Dank schon im voraus.
Beste Grüße
Mathematiker
platzwart - So 05.02.12 20:24
Bild anschließend invertieren?
Mathematiker - 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 - 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 :nixweiss:
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? :gruebel:
Mathematiker - 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
Mathematiker - 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
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!