Monochrom-Bitmap
spacer
Autor Nachricht
Mathematiker
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star
Beiträge: 46
Erhaltene Danke: 5

Win Vista, Win 7
Delphi 5
BeitragVerfasst: 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
ausblenden Delphi-Quelltext markieren
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
ausblenden Delphi-Quelltext markieren
1:
  image1.Picture.Bitmap.transparentcolor := clblack;

bringt auch nichts, ebenso nicht
ausblenden Delphi-Quelltext markieren
1:
  image1.Picture.Bitmap.monochrome := true;

Hat jemand eine Idee? Vielen Dank schon im voraus.

Beste Grüße
Mathematiker
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic starofftopic star
Beiträge: 1008
Erhaltene Danke: 67

Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
BeitragVerfasst: 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)
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Mathematiker Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star
Beiträge: 46
Erhaltene Danke: 5

Win Vista, Win 7
Delphi 5
BeitragVerfasst: So 05.02.12 21:03 
user profile iconplatzwart hat folgendes geschrieben Zum zitierten Posting springen:
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
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Moderator
Beiträge: 2837
Erhaltene Danke: 182

Win 2000, Win XP
Delphi 7, Turbo Delphi Exp.
BeitragVerfasst: 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:

_________________
"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
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Mathematiker Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star
Beiträge: 46
Erhaltene Danke: 5

Win Vista, Win 7
Delphi 5
BeitragVerfasst: 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
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Perlsau
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star
Beiträge: 59
Erhaltene Danke: 4

Win XP pro
Radstudio 2009 pro
BeitragVerfasst: Mo 06.02.12 21:44 
user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconplatzwart hat folgendes geschrieben Zum zitierten Posting springen:
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.


Verstehe ich nicht: Wenn du B&W-Bild invertierst, werden alle schwarzen Punkte weiß und alle weißen schwarz. Somit hast du doch genau das, was du wolltest, oder etwa nicht? Tip: Scanline.

_________________
Die Tränen, die du nicht weinen willst, müssen andere für dich vergießen. (frei nach: Wer nicht leiden will, muß hassen)
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Mathematiker Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star
Beiträge: 46
Erhaltene Danke: 5

Win Vista, Win 7
Delphi 5
BeitragVerfasst: 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
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
home home