Bug: GrabImage mit 1Bit BMP's

Fragen und Bugreports zur PureBasic 4.0-Beta.
Benutzeravatar
Kukulkan
Beiträge: 1066
Registriert: 09.09.2004 07:07
Wohnort: Süddeutschland
Kontaktdaten:

Beitrag von Kukulkan »

Hallo,

Das ganze arbeitet in zwei Schritten: Zuerst suche ich im Schnellverfahren die Barcodes in der gesamten Bitmap. Diese lade ich übrigens normal per LoadImage() ein -> sollte auch nur den Speicher für eine ein Bit Bitmap verbrauchen. Dann habe ich die Koordinaten.
Im zweiten Teil habe ich eine Subroutine die in einem isolierten Bild eines Barcodes den Code selbst ausliest. Ich muss also die gefundenen Barcodes jeweils als Einzelbild (Ausschnitt) übergeben. Das ist auch eine alternative Funktion meiner Library.
Wenn ich die Bitmap mit GrabImage() kopiere, dann ging ich davon aus, dass die Ziel-Bitmap auch nur ein Bit hat. Da GrabImage() keinen Depth-Parameter hat sollte es das auch tun. Leider macht GrabImage() aber die Farben kaputt und liefert mir dann statt weiss einfach Grün oder Cyan. Das ist definitiv ein Bug.

Volker
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

achso.. also das ziel-image hat auch 1-bit-tiefe, aber die farben sind falsch?
das liegt aber nicht an der übertragung des musters, das muss am header liegen.
wenn eine farbzuordnung irgendwo festgelegt ist, dann im header.
oder wird fehlerhafter weise eine tiefere bitmap erzeugt...?

auf jeden fall würde ich eine monochrome bitmap zur weiterverarbeitung vorziehen.
und darauf zugreifen würde ich dann keinesfalls mit Point(),
sondern mit systemseitigen zugriffsbefehlen.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Kukulkan
Beiträge: 1066
Registriert: 09.09.2004 07:07
Wohnort: Süddeutschland
Kontaktdaten:

Beitrag von Kukulkan »

Ich habe jetzt getestet:

GrabImage() macht zwar ebenfalls nur ein "ein Bit Image", aber die Farben werden nicht richtig übertragen.

Code: Alles auswählen

#Source = 1 
#Dest = 2 

#FileSource = "c:\testbild.bmp" 
#FileDest = "c:\testbild_neu.bmp" 

LoadImage(#Source, #FileSource) 

StartDrawing(ImageOutput(#Source)) 
Debug "Farbe oben links 1: " + Str(Point(1,1))
Debug "Tiefe: " + Str(ImageDepth(#Source))
StopDrawing() 

GrabImage(#Source, #Dest, 0, 0, ImageWidth(1), ImageHeight(1)) 

StartDrawing(ImageOutput(#Dest)) 
Debug "Farbe oben links 2: " + Str(Point(1,1))
Debug "Tiefe: " + Str(ImageDepth(#Dest))
StopDrawing() 

SaveImage(#Dest, #FileDest, #PB_ImagePlugin_BMP) 

End
Ergebnis für eine 1-Bit Bitmap:

Code: Alles auswählen

Farbe oben links 1: 16777215 ; (FFFFFF)
Tiefe: 1
Farbe oben links 2: 10813202 ; (A4FF12)
Tiefe: 1
Also ein Bug beim kopieren der Header-Informationen von der Source- zur Destination-Bitmap.

Volker
Gesperrt