Bitmap aus Character Array erzeugen



  • Hallo zusammen,

    ich habe eine Anwendung, die mir 8 Bpp Bitmaps in einem 640*480 unsigned char Array speichert. In jedem Feld wird also genau ein Pixel gespeichert.
    Dieses Array muss ich nun in ein HBITMAP überführen, so dass ich das wiederum an einen AviStream anhängen kann.

    Wäre für einen Tip sehr dankbar!

    MfG,
    Markus



  • Du kannst ein CBitmap an einen CDC (virtuell) anhängen, in diesen dein Array (SetPixel etc.)schreiben und dann die CBitmap weiterverwenden.

    Edit: Ein anderer Weg wäre das Bitmap selbst zu schreiben Stichwort: BitmapInfoHeader



  • Ja, so ähnlich habe ich mir das auch gedacht.
    Und habe auch eine sehr schöne Klasse gefunden um AVIs zu bauen, die etwas in der Art auch schon mitbringt.

    Zu Testzwecken baut der folgende Code ein paar Bilder selbst und macht ein Avi draus, funkt auch wunderbar:

    HDC hdcscreen=GetDC(0);
    	HDC hdc=CreateCompatibleDC(hdcscreen);
    	ReleaseDC(0,hdcscreen);
    	BITMAPINFO bi;
    	ZeroMemory(&bi,sizeof(bi));
    	BITMAPINFOHEADER &bih = bi.bmiHeader;
    
    	bih.biSize=sizeof(bih);
    	bih.biWidth=wx;
    	bih.biHeight=wy;
    	bih.biPlanes=1;
    	bih.biBitCount=depth;
    	bih.biCompression=BI_RGB;
    	bih.biSizeImage = 0;
    	bih.biXPelsPerMeter=0;
    	bih.biYPelsPerMeter=0;
    	bih.biClrUsed=0;
    	bih.biClrImportant=0;
    	void *bits; HBITMAP hbm=CreateDIBSection(hdc,(BITMAPINFO*)&bih,DIB_RGB_COLORS,&bits,NULL,NULL);
    	//
    	HGDIOBJ holdb=SelectObject(hdc,hbm);
    	HPEN hp = CreatePen(PS_SOLID,0,RGB(255,0,0));
    	HGDIOBJ holdp=SelectObject(hdc,hp);
    	//
    	HAVI avi = CreateAvi("c:\\zzzz.avi",1000/fps,NULL);
    	for (int frame=0; frame<frames; frame++)
    	{
    	  // a line moving
    	  MoveToEx(hdc,wx/2,wy/2,NULL);
    	  LineTo(hdc,x[frame%64],y[frame%64]);
    //hier müsste ich irgendwie meine BMP Info einfügen...
    
    	  AddAviFrame(avi,hbm);
    	}
    	CloseAvi(avi);
    

    Leider wurde ich ziemlich ins kalte Wasser geschmissen und muss meinen quasi C++-Einstieg mit dieser Aufgabe machen. Von daher bin ich mir grad nicht im klaren darüber, wie ich die char bytes in eine BMP bekomme.

    Vielleicht kann jmd einen kurzen (Pseudo-)Codeschnipsel basteln der das bewirkt? Wäre sehr nett.

    MfG,
    Markus



  • Ups, bist Du dir sicher, dass du im richtigen Forum bist? Also sprich nutzt Du die MFC?



  • Whoops, da habe ich mich wohl fehl leiten lassen...

    Aber es hat sich eigentlich eh erledigt, denn - MSDN sei Dank - ich hab jetzt was gefunden, was anscheinend auch funktioniert.



  • Tja, RTFM (Read The Fine MSDN) 😉


Anmelden zum Antworten