请教为什么在WinCE下,如下代码SetPixel总是得到同一种颜色?
时间:2011-12-09
来源:互联网
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); }
作者: joshua0137 发布时间: 2011-12-09
原因找到了, m_dcMe.SelectObject(pOldBitmap);一句有问题,在我的WinCE下SetPixel调用不成功
留言的给分
留言的给分
作者: joshua0137 发布时间: 2011-12-09
该回复于2011-12-09 13:52:02被管理员删除
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
|
#3楼 得分:0回复于:2011-12-09 13:58:15
|
作者: mayudong1 发布时间: 2011-12-09
每个像素这样设置如果图像比较大应该会比较慢吧,用GetDIBits和SetDIBits可能比较好点
作者: pshchao 发布时间: 2011-12-09
这样混分是不是不好呢。
恭喜吧。
恭喜吧。
作者: dahaiI0 发布时间: 2011-12-09
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28