c ++ - Kopiering af en bitmap fra en anden HBITMAP

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøger at skrive en klasse til at pakke bitmap-funktionalitet i mit program.


En nyttig funktion ville være at kopiere en bitmap fra et andet bitmap håndtag. Jeg er lidt fast:


    void operator=( MyBitmapType & bmp )
    {
        HDC dcMem;
        HDC dcSource;

        if( m\_hBitmap != bmp.Handle() )
        {
            if( m\_hBitmap )             
                this->DisposeOf();

            // copy the bitmap header from the source bitmap
            GetObject( bmp.Handle(), sizeof(BITMAP), (LPVOID)&m\_bmpHeader );

            // Create a compatible bitmap
            dcMem       = CreateCompatibleDC( NULL );
            m\_hBitmap   = CreateCompatibleBitmap( dcMem, m\_bmpHeader.bmWidth, m\_bmpHeader.bmHeight );

            // copy bitmap data
            BitBlt( dcMem, 0, 0, bmp.Header().bmWidth, bmp.Header().bmHeight, dcSource, 0, 0, SRCCOPY );
        }
    }


Denne kode mangler en ting: Hvordan kan jeg få en HDC til kildebitmapet, hvis alt jeg har af kildebitmapet er et håndtag (for eksempel en HBITMAP?)


Du kan se i koden ovenfor, jeg har brugt 'dcSource' i BitBlt () -kaldet. Men jeg ved ikke hvordan man får denne dcSource fra kildebitmapets håndtag (bmp.Handle () returnerer kildebitmaps håndtere)

Bedste reference


Du kan 't' - kildebitmapet bliver muligvis ikke valgt til en DC, og selvom det er, har du ingen mulighed for at finde ud af, hvad DC.


For at gøre din kopi vil du sandsynligvis bruge noget som:


dcSrc = CreateCompatibleDC(NULL);
SelectObject(dcSrc, bmp);


Så kan du blitke fra kilden til destinationen DC.

Andre referencer 1


Arbejdet for mig:


// hBmp is a HBITMAP 
HBITMAP hBmpCopy= (HBITMAP) CopyImage(hBmp, IMAGE\_BITMAP, 0, 0, LR\_DEFAULTSIZE);