请教为什么在WinCE下,如下代码SetPixel总是得到同一种颜色?
m_DisableBmp.LoadBitmap(nID); m_clrTrans = clrTrans; BITMAP bm; ASSERT(m_hWnd); CPaintDC dc(this); m_dcMem.CreateCompatibleDC(&dc); // Select the bitmap into the in-memory DC CBitmap* pOldBitmap = dcMem.SelectObject(&m_NoramlBmp); static CRgn crRgn, crRgnTmp; crRgn.CreateRectRgn(0, 0, 0, 0); m_DisableBmp.GetBitmap(&bm); int iX = 0; for (int iY = 0; iY < bm.bmHeight; iY++) { do { //skip over transparent pixels at start of lines. while (iX <= bm.bmWidth && m_dcMe.GetPixel(iX, iY) == clrTrans) iX++; //remember this pixel int iLeftX = iX; while (iX <= bm.bmWidth) { COLORREF clr = dcMem.GetPixel(iX, iY); if (clr != clrTrans) //灰化 { COLORREF newclr; BYTE r = GetRValue(clr); BYTE g = GetGValue(clr); BYTE b = GetBValue(clr); BYTE n = BYTE(0.299 * b + 0.587 * g + 0.114 * r); newclr = RGB(n ,n, n); m_dcMe.SetPixel(iX, iY, newclr); iX++; } else break; } crRgnTmp.CreateRectRgn(iLeftX, iY, iX-1, iY+1); crRgn.CombineRgn(&crRgn, &crRgnTmp, RGN_OR); crRgnTmp.DeleteObject(); }while(iX < bm.bmWidth); iX = 0; } SetWindowRgn(crRgn, FALSE); m_dcMe.SelectObject(pOldBitmap);}