Создание растрового изображения с определенным форматом, чтобы инвертировать / отразить его - PullRequest
1 голос
/ 01 февраля 2012

Я использую следующий метод для создания инвертированного растрового изображения:

HBITMAP CreateMirroredBitmap( HBITMAP hbmOrig)
{
    HDC hdc, hdcMem1, hdcMem2;
    HBITMAP hbm = NULL, hOld_bm1, hOld_bm2;
    BITMAP bm;
    if (!hbmOrig)
        return NULL;
    if (!GetObject(hbmOrig, sizeof(BITMAP), &bm))
        return NULL;

    // Grab the screen DC.
    hdc = GetDC(NULL);
    if (hdc)
    {
        hdcMem1 = CreateCompatibleDC(hdc);
        if (!hdcMem1)
        {
            ReleaseDC(NULL, hdc);
            return NULL;
        }
        hdcMem2 = CreateCompatibleDC(hdc);
        if (!hdcMem2)
        {
            DeleteDC(hdcMem1);
            ReleaseDC(NULL, hdc);
            return NULL;
        }
        hbm = CreateCompatibleBitmap(hdc, bm.bmWidth, bm.bmHeight);
        if (!hbm)
        {
            ReleaseDC(NULL, hdc);
            DeleteDC(hdcMem1);
            DeleteDC(hdcMem2);
            return NULL;
        }
        // Flip the bitmap.
        hOld_bm1 = (HBITMAP)SelectObject(hdcMem1, hbmOrig);
        hOld_bm2 = (HBITMAP)SelectObject(hdcMem2 , hbm );
        SetLayout(hdcMem2, LAYOUT_RTL);
        BitBlt(hdcMem2, 0, 0, bm.bmWidth, bm.bmHeight, hdcMem1, 0, 0, SRCCOPY);
        SelectObject(hdcMem1, hOld_bm1 );
        SelectObject(hdcMem1, hOld_bm2 );
        DeleteDC(hdcMem1);
        DeleteDC(hdcMem2);
        ReleaseDC(NULL, hdc);
    }
    return hbm;
}

Взято отсюда: http://msdn.microsoft.com/en-us/goglobal/bb688119

Проблема заключается в том, какое растровое изображение я использую для ввода (8, 16 или 32-битные цвета) он всегда будет выводить 32-битное растровое изображение.Я предполагаю, что CreateCompatibleBitmap создает 32-битное растровое изображение по умолчанию, потому что DC, который я передаю, является DC экрана, который является 32-битным.Есть ли способ отразить растровое изображение, но также сохранить его глубину цвета?

1 Ответ

5 голосов
/ 01 февраля 2012

CreateBitmap и CreateDIBSection создадут вам растровое изображение запрошенной битности, и вы все равно сможете выбрать их с DC для получения результата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...