bitmap aus bytearray



  • Hallo,
    ich hab ein (für mich jedenfalls) etwas kniffliges Problem. Ich habe aus einer Java-Klasse ein bytearray mit Bildinformationen und möchte nun ein Bitmap in c++ erstellen.
    Leider habe ich keine Ahnung wie ich das anstellen soll. Mir liegen die 3Byte bgr Daten als byte[] vor.

    Vielleicht kann mich jemand auf die richtige Spur bringen. Hab im Inet und hier im Forum leider nix passendes gefunden!

    Danke schonmal...



  • ANSI C++ kann mit Bitmaps nicht besonders viel anfangen, also mußt du hierfür auf Funktionen deines Betriebssystems ausweichen, z.B. CreateDIBitmap in der WinAPI.



  • Ah, das hilft mir erstmal weiter. Danke.



  • Also Bitmaps kann man auch mit ISO C++ erstellen, warum auch nicht? Es sind nur (wie der Name sagt) reine Bits und Bytes von Daten. Das Anzeigen auf dem Screen oder auf dem Drucker ist natürlich eine andere Story. Aber Bitmaps erstellen und manipulieren geht mit ISO-C++ Mitteln.



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • FAQ "Bild speichern" könnte da auch nen Blick wert sein:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-39400.html



  • wenn du das Bild speichern willst, dann schau dir das hier einmal an. SO habe ich es mal gemacht:

    filecounter++;
    				char filename[30]= "C:\\Bilder\\Bild";
    				char numer[10];
    				itoa(filecounter, numer, 10);
    				strcat(filename, numer);
    				strcat(filename, ".bmp");
    // Alles was oberhalb dieses Komentars steht ist nur dazu da um den Pfad und den
    // Bildnamen zu erstellen. Ich habe mehrere Bilder mit fortlaufender Nummer gespeichert.
    
    				HANDLE hf = CreateFile(filename, GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, NULL, NULL );
    
    				if( hf == INVALID_HANDLE_VALUE )
    				{
    				   return 0;
    				}
    
    		//		Schreiben des BITMAPFILEHEADER´s
    
    				memset( &bfh, 0, sizeof( bfh ) );
    				bfh.bfType = 'MB';
    				bfh.bfSize = sizeof( BITMAPINFOHEADER );
    
    				//Schreiben des BITMAPINFOHEADER´s
    
    				DWORD Written = 0;
     				WriteFile( hf, &bfh, sizeof( bfh ), &Written, NULL );
    				Written = 0;
    				WriteFile( hf, &(bmih), sizeof(bmih ), &Written, NULL );
    
    				//Schreiben RGBQUAD Arrays
    
    				Written = 0;
    				WriteFile( hf, pBuffer, BufferSize, &Written, NULL );
    
    				CloseHandle( hf );
    

    vielleicht hilft dir das weiter.
    Du musst zuerst den Bitmapfileheader, dann den Bitmapinfoheader und zuletzt das RGBQuad Array in die Datei schreiben.
    Im RGBQUAD Array stehen Die Farbinformationen für jedes einzelnen Pixel.


Anmelden zum Antworten