Копирование растрового изображения из другого HBITMAP - PullRequest
5 голосов
/ 16 апреля 2011

Я пытаюсь написать класс для переноса функции растрового изображения в моей программе.

Одной из полезных функций будет копирование растрового изображения из другого дескриптора растрового изображения.Я немного застрял:

    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 );
        }
    }

В этом коде отсутствует одна вещь: как я могу получить HDC для исходного растрового изображения, если все, что у меня есть в исходном растровом изображении, это дескриптор (например, HBITMAP?)

Вы можете видеть в коде выше, я использовал "dcSource" в вызове BitBlt ().Но я не знаю, как получить этот dcSource из дескриптора исходного растрового изображения (bmp.Handle () возвращает дескриптор исходного растрового изображения)

Ответы [ 2 ]

8 голосов
/ 16 апреля 2011

Вы не можете - исходное растровое изображение может вообще не быть выбрано в DC, и даже если это так, у вас нет никакого способа узнать, какой DC.

Чтобы сделать копию, вы, вероятно, захотите использовать что-то вроде:

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

Затем вы можете переместиться от источника к DC назначения.

2 голосов
/ 28 июля 2017

работал для меня:

// hBmp is a HBITMAP 
HBITMAP hBmpCopy= (HBITMAP) CopyImage(hBmp, IMAGE_BITMAP, 0, 0, LR_DEFAULTSIZE);
...