对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然后打印,得到的位图也是这样,为什么?
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]);
}
}
GetPixel
和
SetPixel
坐标也反了。