получение значения RGB из пикселя и установка значений rgb обратно в тот же пиксель

В приведенном ниже фрагменте кода я пытаюсь получить значения 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);
    }

person Jessica    schedule 17.11.2010    source источник


Ответы (1)


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

person casablanca    schedule 17.11.2010