char Buffer in PictureBox anzeigen
-
Hallo,
Ich habe ein Problem, das eigendlich nicht so schwer sein sollte, aber ich denke ich seh mal wieder den Wald vor lauter Bäumen nicht.
Aus einer Dll erhalte ich Bilddaten als unsigned char* Pointer. Die Höhe, Breite und Tiefe der erhaltenen Bilder kann ich über die Bibliothek bekommen.
Soweit so gut.Nur wie stelle ich jetzt das Bild in einer PictureBox an?
Ich hab mit Drawing::Image rumgespielt, bin aber noch auf keinen grünen Zweig gekommen.Welches Brett hab ich denn schon wieder vor dem Kopf?
Grüsse, Streen
-
Pack die Daten in einen MemoryStream und rufe Bitmap.FromStream auf. (Und eventuell nach dem reinpacken den Stream an den Anfang seeken)
-
Danke Knuddlbaer,
Leider hat das nicht funktioniert, da im Stream kein gültiges bildformat war. Ich erhalte die Bilddaten wirklich roh... sprich ein Byte ist ein Grauwert und der erste Wert in meinem Byte ist auch gleich das erste Pixel. Scheinbar kommt damit das Bitmap.Fromstream nicht zurrecht.
Bin dann aber auf eine Lösung gekommen, die zwar nicht schön ist, aber sie funzt...
int alloc = getAllocSize(Handle); unsigned char * pchr_Buffer = new unsigned char[alloc]; int_retVal = getContinuousImage(Handle, pchr_Buffer); tb_Notes->Text = String::Concat(tb_Notes->Text,"Grab: ", int_retVal.ToString()); if (int_retVal == 0){ //paint the image to the picture box pb_Image->Size = Drawing::Size(getWidth(Handle), getHeight(Handle)); unsigned char * pchr_Buffer2 = new unsigned char[alloc*3]; for (int int_Counter = 0; int_Counter < alloc; int_Counter++){ pchr_Buffer2[int_Counter*3] = pchr_Buffer[int_Counter]; pchr_Buffer2[int_Counter*3+1] = pchr_Buffer[int_Counter]; pchr_Buffer2[int_Counter*3+2] = pchr_Buffer[int_Counter]; } Bitmap * btm = new Bitmap( getWidth(Handle), getHeight(Handle), getWidth(Handle) * 3, // stride System::Drawing::Imaging::PixelFormat::Format24bppRgb, pchr_Buffer2); pb_Image->Image = btm; pb_Image->Refresh();
Da es unter Pixelformat kein 8 Bit grauwert gibs (sehr seltsam) muss ich halt den kleinen umweg über 24 bit rgb gehen...
Grüsse, Streen