byte array zu 1bpp Bitmap Problem

14/11/2011 - 11:48 von Sven Bauermann | Report spam
Hallo,

nachdem ich mit probieren ordentlich Zeit verloren habe und meine Ideen
ausgehen, poste ich mal meine Sorgen.

Einleitung:
Aus einem Nistfile (Biometric Standard File) werden aus einem Record 8,
Datenfelder ausgelesen. Ab der Bytestelle 13 bis 62512 liegt ein Bild.
Durch die Spezifikation wird ein 1000 x 500 Pixel größes Bild, mit einer
Auflösung von 500ppi erwartet. 8 Pixel wurden in ein byte gepackt. Das
Bild ist unkomprimiert. Es handelt sich also um ein Black and White Bild
was bei Unterschriften Bildern auch zu erwarten ist. Das Bild ist exact
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ß. Ich habe keine Idee wieso,
das bei meinem Versuch nicht so ist.

Vielen Dank für Ideen und Hilfe
Gruß Sven

Hier mein Code:

Aufruf:
XImage = CopyDataToBitmap(rawdata, _HLL, _VLL,
PixelFormat.Format1bppIndexed);

protected Bitmap CopyDataToBitmap(byte[] data, int pWidth, int pHeight,
PixelFormat pPix)
{
//here create the bitmap to the know height, width and
format
Bitmap bmp = new Bitmap(pWidth, pHeight, pPix);
//bmp.SetResolution(500.0F, 500.0F);

//create a bitmapdata and lock all pixel to be written
BitmapData bmpData = bmp.LockBits(new Rectangle(0, 0,
bmp.Width, bmp.Height),
ImageLockMode.WriteOnly, bmp.PixelFormat);

//Copy the data from the byte array into BitmapData.Scan0
Marshal.Copy(data, 0, bmpData.Scan0, data.Length);

//unlock the pixel
bmp.UnlockBits(bmpData);

bmp.Save(@"C:\Sigantur.bmp",ImageFormat.Bmp);

//return the bitmap
return bmp;
}
 

Lesen sie die antworten

#1 Uwe Hercksen
14/11/2011 - 16:49 | Warnen spam
Sven Bauermann schrieb:

Aus einem Nistfile (Biometric Standard File) werden aus einem Record 8,
Datenfelder ausgelesen. Ab der Bytestelle 13 bis 62512 liegt ein Bild.
Durch die Spezifikation wird ein 1000 x 500 Pixel größes Bild, mit einer
Auflösung von 500ppi erwartet. 8 Pixel wurden in ein byte gepackt. Das
Bild ist unkomprimiert. Es handelt sich also um ein Black and White Bild
was bei Unterschriften Bildern auch zu erwarten ist. Das Bild ist exact
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.



Hallo,

unter Windows sind Bitmap Bilder drei Byte pro Pixel, jeweils ein Byte
für Rot, Grün und Blau Wert. In Deinem NistFile sind aber nur schwarz
oder weiß Pixel, dazu noch 8 Pixel in einem Byte.
Diese verschiedenen Darstellungen musst Du entsprechend selbst per
Programm umwandeln, also für jedes Pixel ein Bit extrahieren und daraus
3 Bytes machen.

Bye

Ähnliche fragen