Bild ausschneiden



  • Was meinst du mit Memory-DC. 😕 Kannst du nicht einfach mal einen richtigen Code (mit Kommentaren falls nicht umständlich) hier zeigen, bitte?

    mfg A-lex



  • Das was du mit CreateCompatibleDC erstellst ist ein Memory-DC.

    HBITMAP hBitmap = Load...(); // schon geladenes Bild
    HDC hDCBitmap = CreateCompatibleDC(NULL);
    SelectObject(hDCBitmap,hBitmap);
    
    HDC hDest = CreateCompatibleDC(NULL);
    HBITMAP hNew = CreateCompatibleBitmap(hDCBitmap,32,32);
    SelectObject(hDest,hNew);
    BitBlt(hDest,0,0,32,32,hDCBitmap,0,0,SRCCOPY);
    
    // mache etwas mit hDCBitmap und hDest
    
    DeleteDC(hDCBitmap);
    DeleteObject(hBitmap);
    
    DeleteDC(hDest);
    DeleteObject(hNew);
    

    Hoffentlich hab ich jetzt keine allzu großen Fehler drinnen. BTW: Ich weiß ja nicht genau, was du vorhast, aber du kannst auch einfach gleich den entspechenden Ausschnitt auf dein Fenster blitten. (ohne den Umweg über hDest)



  • Ich will mit

    HWND hStatic = CreateWindowEx(WS_EX_TRANSPARENT,"STATIC","",WS_VISIBLE | WS_CHILD | WS_BORDER | SS_BITMAP,0,0,32,32,hWnd,NULL,hInstance,NULL)
    SendMessage(hStatic,STM_SETIMAGE,IMAGE_BITMAP,hDest);
    

    es in ein Static-Feld reinmachen. Und irgenwie funktioniert das immer noch nicht bei mir.

    mfg A-lex



  • Da musst du dann auch ein Bitmap-Handle angeben - also hNew.
    Du solltest dir etwas besser anschauen, wie genau die Funktionen deklariert sind und nicht einfach das nächstbeste übergeben!



  • geht auch nicht.

    mfg A-lex



  • Dann zeig mal etwas mehr Code



  • Was meinst du mit mehr Code? Du hast doch selber den Teil geschrieben und ich hab es übernohmen.

    mfg A-lex



  • Vielleicht hast du ihn ja auch falsch eingebaut 🙄
    Kann natürlich auch sein, dass mein Code fehlerhaft ist - du solltest auf jeden Fall mal die Rückgabewerte überprüfen. Und wie sieht das "geht auch nicht" aus?! Bekommst du Fehler? Etwas mehr Infos wären halt nicht schlecht, denn sonst kann man nur wild herumraten!



  • Könnte es daran liegen, dass sie verschiedene Größen haben oder so?

    mfg A-lex



  • So jetzt hab ich's raus:

    // hdc = aktuelles DC zum Zeichnen
    // hBmp = geladenes Bild
    // geht nur beim WM_PAINT
    
    HDC NewDC = CreateCompatibleDC(hdc);
    HBITMAP NewBmp = CreateCompatibleBitmap(hdc,32,32);
    SelectObject(NewDC,NewBmp);
    
    HDC hMemDC = CreateCompatibleDC(hdc);
    SelectObject(hMemDC,hBmp);
    
    BitBlt(NewDC,0,0,32,32,hMemDC,0,0,SRCCOPY);
    
    DeleteDC(NewDC);
    DeleteDC(hMemDC);
    

    mfg A-lex


Anmelden zum Antworten