PNG Bild in Byte-Array ?
-
Hi!
Kann mir jemand hier sagen, wie ich eine PNG-Bild Datei, in ein Byte-Array laden kann?
Mit einem BMP File hab ich es nach (etwas längerer Zeit :)) geschafft:BYTE* LoadBMP ( int* width, int* height, long* size, long* depth, char* bmpfile ) { /* bitmap structures */ BITMAPFILEHEADER bmpheader; BITMAPINFOHEADER bmpinfo; DWORD bytesread; /* open input file */ HANDLE file = CreateFile ( bmpfile , GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL ); if ( NULL == file ) return NULL; // coudn't open file /* read file header */ if ( ReadFile ( file, &bmpheader, sizeof ( BITMAPFILEHEADER ), &bytesread, NULL ) == false ) { CloseHandle ( file ); return NULL; } if ( ReadFile ( file, &bmpinfo, sizeof ( BITMAPINFOHEADER ), &bytesread, NULL ) == false ) { CloseHandle ( file ); return NULL; } /* und hier fliegt er bei nem PNG raus */ if ( bmpheader.bfType != 'MB' ) { printf("not a bitmap!\n"); CloseHandle ( file ); return NULL; } /* image size */ *width = bmpinfo.biWidth; *height = abs ( bmpinfo.biHeight ); *depth = bmpinfo.biBitCount; *size = bmpheader.bfSize - bmpheader.bfOffBits; BYTE* Buffer = new BYTE[ *size ]; SetFilePointer ( file, bmpheader.bfOffBits, NULL, FILE_BEGIN ); if ( ReadFile ( file, Buffer, *size, &bytesread, NULL ) == false ) { printf("unable to stat ReadFile()\n"); delete [] Buffer; CloseHandle ( file ); return NULL; } CloseHandle ( file ); return Buffer; }hat jemand nen kleinen Tip ?
-
Eine PNG-Datei ist keine BMP-Datei. Letztere hat eine eindeutige Dateistruktur und man kann jedes Pixel direkt über ein BYTE-Array ansprechen.
Informationen findest Du hier (sogar in deutsch):
http://stud3.tuwien.ac.at/~e9925208/ping.htm
http://de.wikipedia.org/wiki/Portable_Network_Graphics#Technische_DetailsIch nehme mal an, das Du auch irgendwas mit dem Array anstellen willst. Dann ist wohl die Konvertierung in BMP die einfachere Lösung.
-
wohl die beste seite um file formate zu parsen
http://www.wotsit.org/Manfred Schmidtke schrieb:
Eine PNG-Datei ist keine BMP-Datei. Letztere hat eine eindeutige Dateistruktur und man kann jedes Pixel direkt über ein BYTE-Array ansprechen.
ich denke schon das man png in ein byte array laden kann bzw. bin mir sogar ziemlich sicher, denn in der spieleprogrammierung erstellt man texturen meistens
nur aus rohen pixeldaten unterschiedlicher formate und png ist eins davon.
-
Schon klar, jedes Bildformat kann man in ein byte-array packen. Nur das mit Bitmaps dazu nicht erst noch umwandeln muss (sofern nicht RLE komprimiert...)
Als GDI+ Fan schlage ich vor, die png-Datei über GDI+ zu laden
