读书人

请问为什么在WinCE下如下代码SetPix

发布时间: 2012-01-30 21:15:58 作者: rapoo

请教为什么在WinCE下,如下代码SetPixel总是得到同一种颜色?

C/C++ code
 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);}


[解决办法]
恭喜问题解决
[解决办法]
每个像素这样设置如果图像比较大应该会比较慢吧,用GetDIBits和SetDIBits可能比较好点
[解决办法]
这样混分是不是不好呢。
恭喜吧。

读书人网 >VC/MFC

热点推荐