Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Farbstich nach Bitmap-Operation (https://www.delphipraxis.net/132787-farbstich-nach-bitmap-operation.html)

Schwedenbitter 19. Apr 2009 22:03


Farbstich nach Bitmap-Operation
 
Hallo,

ich habe folgendes Problem mit monochromen Grafiken:
Ich habe ein servergestützes Programm, welches an mehreren Arbeitsplätzen läuft. An den jeweiligen Arbeitsplätzen scanne ich Bilder mittels der Komponente TDelphiTwain ein. Und zwar standardmäßig immer in Schwarzweiß und mit 200 dpi. Wenn der Sacnner das kann, gibt es kein Problem.
Leider können manche Scanner aber nur 300 dpi oder scannen im Querformat. Das zwingt mich, die Bilder zu drehen und/oder zu stauchen. Die von mir dazu verwendeten Funktionen PlgBlt bzw. StretchBlt arbeiten aber nicht mit monochromen Bitmaps. Das wäre auch nicht das Problem, da ich ja das Bild nach dem Bearbeiten mit Bitmap.PixelFormat:=pf1bit; wieder monochrom machen kann; jedenfalls theoretisch.

Leider bekommen diese Bilder aber immer einen "Farbstich". Es sind zwar zwei Farben (=monochrom). Aber neben schwarz bekomme ich nicht weiß, sondern meistens rot. Ich habe auch schon blau und grün gehabt. Mein Plan ist nun, dass ich die Farbe, die nicht schwarz ist, innerhalb der Palette (ich gehe davon aus, dass es eine Palette gibt) einfach auf weiß setze. Ich komme nur nicht drauf, wie das möglichst einfach geht. Ich habe mir schon mehrere Sachen angesehen, so z.B. das hier. Ich verstehe es leider nicht.

Gibt es eine Möglichkeit, wie ich einfach von den beiden Farben im Bitmap die eine auf weiß setze?

Gruß und Danke, Alex

Blup 20. Apr 2009 16:24

Re: Farbstich nach Bitmap-Operation
 
Erst Monochrome setzen, danach Pixelformat.
Delphi-Quellcode:
Bitmap.Monochrome := True;
Bitmap.Pixelformat := pf1Bit;

Schwedenbitter 23. Apr 2009 09:06

Re: Farbstich nach Bitmap-Operation
 
Zitat:

Zitat von Blup
Erst Monochrome setzen, danach Pixelformat.
Delphi-Quellcode:
Bitmap.Monochrome := True;
Bitmap.Pixelformat := pf1Bit;

Danke! Grundsätzlich funktioniert das auch. Allerdings ist das Ergebnis von der Qualität her nicht ganz das, was ich brauche.

Ich habe jetzt die Feststellung gemacht, dass die Function PlgBlt() offensichtlich Probleme hat. Die Bilder werden - wie schon beschrieben - um den Scanner nicht zu beeinflussen, sofort nach dem Scannen erstmal in einer TObjectList als TBitmap abgelegt. Erst nach dem Scannen des letzten Bildes startet das Drehe, Stretchen und Speichern. Ich hatte deshalb zuerst die TObjectList als Übeltäter im Verdacht. Aber auch wenn ich das Bild sofort nach dem Scannen verarbeite, klappt das Drehen nicht. Und das obwohl ich von TDelphiTwain ein TBitmap mit pf1bit geliefert bekomme.

Ich habe aber die Feststellung gemacht, dass es auf die Reihenfolge ankommt. Wenn ich das Bild zuerst mit StretchBlt() bearbeite, dann klappt das Drehen anschließend mit PlgBlt(). Aber viel besser ist es, dass er sich dann auch pf1bit merkt und ich nichts mehr machen muss. Mein Bild ist und bleibt monochrom.
---> Keine Ahnung warum. Aber wichtig ist das Ergebnis. :cheers:

Danke an alle Mitdenker.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:09 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz