получение значения RGB из пикселя и установка значений RGB в тот же пиксель - PullRequest
0 голосов
/ 17 ноября 2010

В приведенном ниже фрагменте кода я пытаюсь получить значения RGB пикселя в Visual C ++, а затем установить те же значения RGB, чтобы они были одинаковыми. то есть это всего лишь тест. Однако, когда я делаю это, получающееся изображение похоже, но цвета неправильные / выключены. Полученное изображение, по-видимому, полностью пропускает пиксели желтого цвета исходного изображения. Почему после этого я не получаю одно и то же изображение? Любая помощь будет наиболее ценной. Спасибо

        BYTE *pbBitmap;
    HBITMAP hDestBitmap = CreateDIBSection(memDC1, &bi, DIB_RGB_COLORS,(void**)&pbBitmap, NULL, 0);

    if (hDestBitmap){
        SelectObject(DestDC2, hDestBitmap);
        BitBlt(DestDC2, 0, 0, nX, nY, memDC1, 0, 0, SRCCOPY);

        RGBQUAD *pRGB;
        LONG nPixels;
        for (pRGB = (RGBQUAD *)pbBitmap, nPixels = (nX * nY); nPixels > 0; ++pRGB, --nPixels){
            ULONG* pSrc =(ULONG*)pRGB;
            ULONG nRed = GetRValue(*pSrc);
            ULONG nGreen = GetGValue(*pSrc);
            ULONG nBlue = GetBValue(*pSrc);

            pRGB->rgbRed=nRed;
            pRGB->rgbGreen=nGreen;
            pRGB->rgbBlue=nBlue;
        }

        CRect rctPicture2;
        m_Picture2.GetWindowRect(&rctPicture2);
        ScreenToClient(&rctPicture2);
        dc.SetStretchBltMode(COLORONCOLOR);
        StretchBlt(dc,rctPicture2.left,rctPicture2.top,rctPicture2.Width(),rctPicture2.Height(),DestDC2,0,0,1152,864,SRCCOPY);
    }

1 Ответ

3 голосов
/ 17 ноября 2010

Неправильный способ доступа к значениям цвета.GetRValue и другие функции предназначены для работы со значением COLORREF, которое записано в памяти как red-green-blue-reserved, тогда как формат RGBQUAD равен blue-green-red-reserved.Используя макросы Get?Value на RGBQUAD, вы меняете красный и синий каналы.

...