对BMP位图使用下面函数获取RGB
bool GetHDCBitmapRGB (HBITMAP hBitmap, COLORREF** pRgb, int* row, int* low)
{
HDC hMemDC = ::CreateCompatibleDC(NULL);
if (hMemDC == NULL || hBitmap == NULL 
          || pRgb == NULL || row == NULL || low == NULL)
return false;
else
{
::SelectObject (hMemDC, hBitmap);
BITMAP bm;  
::GetObject (hBitmap, sizeof(BITMAP), &bm); *row = bm.bmHeight;
*low = bm.bmWidth;

*pRgb = new COLORREF[(*row) * (*low)];
COLORREF* pTemp = *pRgb; for (int i = 0; i < *row; ++i)  
{  
for (int j = 0; j < *low; ++j)  
{  
pTemp[i * j + j] = ::GetPixel (hMemDC, i, j);
}  
}  
::DeleteDC (hMemDC);
return true;
}
}使用SetPixel打印RGB后变这样,还有使用GetDIBits然后打印,得到的位图也是这样,为什么?

解决方案 »

  1.   

    我发现打印的图成对称的了,是pTemp[i * j + j] = ::GetPixel (hMemDC, i, j);的问题吧,要怎么赋值?
      

  2.   

    打印的时候
    for (int i = 0; i < m_row; ++i)
    {
            for (int j = 0; j < m_low; ++j)
    {
         ::SetPixel (hdc, i+100,j+100, m_pRGB[i*j+j]);
    }
    }
      

  3.   

    解决了哈这儿竟然用 i*j。 pTemp[i * j + j]
    GetPixel 

    SetPixel 
    坐标也反了。
      

  4.   

    你那样直接操作肯定不行了,你要看下你那个图是多少位的,1-bits,8-bits,16-bits的图像所占的位数是不一样的~~