Hbitmap in Hbitmap



  • morgen,

    ich habe eine stream dessen bilder permanent in einem hbitmap gespeichert werden.
    Jetzte will ich ne Art Standbild extrahieren können und daneben anzeigen.

    Theoretischach sollte es ja ausreichen einfach das eine hbitmap in das andere zu kopieren jedoch klappt es bei mir nicht so richtig.

    HBITMAP eins;
    HBITMAP zwei;

    zwei=eins;

    Warum geht das nicht? Muss man evtl. wie beim laden auch LoadImage verwenden?

    Bin für jegliche Hilfe dankbar.
    MISCHU



  • Du kopierst dir ja nur das Handle und nicht das Bitmap an sich. Du könntest z.B. mit CreateCompatibleDC einen weiteren MemoryDC erstellen, in den du das ganze einfach nochmal hineinblittest 😉



  • An diese Lösung habe ich natürlich auch schon gedacht, jedoch gibt es dabei ein Problem.

    Ich verwende mehrer Prozeduren und am Ende eine Prozedur wird ja immer jedes DC beendet.

    D.h. dass ich mein Bild ne millisekunde sehe und es dann wieder verloren ist weil der DC ja geleert oder gelöscht wurde.

    Also ? gibts noch andere Möglichkeiten?

    MISCHU



  • Ich denke, dann hast du irgendwo einen Design-Fehler im Code. Zeig doch mal die entsprechende Stelle.



  • hdc = BeginPaint(hwnd, &ps);
    
    	screen_width  = ps.rcPaint.right  - ps.rcPaint.left;
    	screen_height = ps.rcPaint.bottom - ps.rcPaint.top;
    
    	tabelle_x=0;
    	tabelle_y=0;
    
    	memorydc=CreateCompatibleDC(hdc);
        oldbitmap=(HBITMAP)SelectObject(memorydc,D_backbitmap);
    
    	hDC2 = CreateCompatibleDC(hdc);
    
    	hBM = CreateCompatibleBitmap(hdc,screen_width,screen_height); 
    	SelectObject(hDC2, hBM);
    
    	PatBlt(hDC2, 0, 0, screen_width,screen_height, WHITENESS);
        SetBkMode(memorydc, TRANSPARENT);
    
        BitBlt(hDC2,tabelle_x+20,tabelle_y+21,D_width,D_height,memorydc,0,0,SRCCOPY);
    
    //////////////////// REF BILD//////////////////////////////////////
    	if(ref_image_dc_empty)
    		{
    		ref_image_dc=memorydc;
    		ref_image_dc_empty=false;
    		}
    		BitBlt(hDC2,tabelle_x+20+160+9,tabelle_y+21,D_width,D_height,ref_image_dc,0,0,SRCCOPY);
    

    MISCHU



  • Du darfst dann natürlich nicht jedesmal in WM_PAINT einen neuen DC erstellen - außerdem fehlen bei dir die DeleteDC Aufrufe 😉


Anmelden zum Antworten