Hallo liebe Gemeinde.
Ich bin neu hier und hoffe, dass jemand eine Erklärung für mein Problem hat. Ich werde mich bemühen, dass Board mit nützlichen Beiträgen zu füllen, wenn ich etwas beisteuern kann.
Einleitung:
Aus einem ANSI NIST File (Biometric Standard - ist aber hier nicht von Bedeutung),
werden aus einem binären Bytebereich, Datenfelder ausgelesen.
So z.B. liegt ab der Bytestelle 13 bis 62512 ein Bild.
Durch die Spezifikation des Filestandards, wird ein 1000 x 500 Pixel großes Bild,
mit einer Auflösung von 500ppi erwartet (Auflösung hier aber uninteressant).
Der Ursprung des Bildes ist ein Signaturpad oder gescanntes Bild.
8 Pixel wurden in ein byte gepackt. Das Bild ist unkomprimiert.
Es handelt sich also um ein Black and White Bild.
Das Bild ist exakt 62500 byte groß. Bei 8 Pixel für ein byte, steht jedes Bit für ein Pixel
als 62500 x 8 = 500.000 Pixel. Völlig korrekt bis hier. Leider liefert
der aus meiner Sicht korrekt Code ein Bild mit weißen Hintergrund und
einigen schön verteilten schwarzen Strichen, keine Unterschrift.
Ich habe ausgeschlossen, dass es sich bei den BitmapData Werten um
Schrott handelt. Ich habe mit einem Freeware Nistviewer (Cognaxon), das
File geöffnet und die Unterschrift ordentlich dargestellt.Lediglich der
Hintergrund ist schwarz und die Schrift weiß. Das Unterschirften Bild ist bei dem Freeware Tool zwar invertiert aber ansonsten ok.
Ich habe keine Idee wieso, das bei meinem Versuch nicht so ist. Ich schicke das 62500k große Bytearray in die Welt ein Bitmap zu werden und wähle natürlich für FormatPixel.Format1bppIndexed. Bin ratlos.
Vielen Dank für Ideen und Hilfe
Gruß Sven
Hier mein Code:
Aufruf:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| XImage = CopyDataToBitmap(rawdata, _HLL, _VLL, PixelFormat.Format1bppIndexed);
protected Bitmap CopyDataToBitmap(byte[] data, int pWidth, int pHeight, PixelFormat pPix) { Bitmap bmp = new Bitmap(pWidth, pHeight, pPix); BitmapData bmpData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.WriteOnly, bmp.PixelFormat);
Marshal.Copy(data, 0, bmpData.Scan0, data.Length);
bmp.UnlockBits(bmpData);
bmp.Save(@"C:\Sigantur.bmp",ImageFormat.Bmp);
return bmp; } |
Moderiert von Th69: C#-Tags hinzugefügt