各位高手过来看一下这段代码,关于遍历bmp像素

zgszft 2011-08-09 05:23:52

BITMAP bm;
COLORREF m_rgb;
m_r=0,m_g=0,m_b=0;//int
m_bmp-> GetObject(sizeof(bm),(LPVOID)&bm);//CBitmap *m_bmp;
memDC.SelectObject(&m_bmp);

int rx,ry;
for(rx=0;rx<bm.bmWidth;rx++)
{
for(ry=0;ry<bm.bmHeight;ry++)
{
m_rgb=memDC.GetPixel(rx, ry);
m_r+= GetRValue(m_rgb);//R
m_g+= GetGValue(m_rgb);//G
m_b+= GetBValue(m_rgb);//B
}
}
int colorpoint=bm.bmWidth*bm.bmHeight;


m_r=m_r/colorpoint;
m_g=m_g/colorpoint;
m_b=m_b/colorpoint;

为啥最后rgb分别都为255呢?这段代码问题在哪请指出来,多谢!
...全文
132 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
zgszft 2011-08-09
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zgl7903 的回复:]
//CBitmap *m_bmp;
m_bmp->GetBitmap(&bm);
memDC.SelectObject(m_bmp); //已经是指针了, 就不要再取指针的地址
[/Quote]哦,知道了,多谢了,刚才的回复请见谅,澳洲这边太晚了,眼花了。。
zgszft 2011-08-09
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zgl7903 的回复:]
//CBitmap *m_bmp;
m_bmp->GetBitmap(&bm);
memDC.SelectObject(m_bmp); //已经是指针了, 就不要再取指针的地址
[/Quote]
这句其实是没用的。。。。错误和这句无关。
zgl7903 2011-08-09
  • 打赏
  • 举报
回复
//CBitmap *m_bmp;
m_bmp->GetBitmap(&bm);
memDC.SelectObject(m_bmp); //已经是指针了, 就不要再取指针的地址
zgszft 2011-08-09
  • 打赏
  • 举报
回复
顶起来
zgszft 2011-08-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 crjwlaq 的回复:]
一个像素点 rgb值组成

那就看你像用这个rgb当个值来干什么 比如计算灰度 有灰度的计算方法的
[/Quote]我的目的是计算一张位图的平均颜色,思路是这样的,遍历位图所有的点,然后把它们的R、G、B值分别全加起来然后分别除于遍历点的数量得出平均颜色的RGB值
crjwlaq 2011-08-09
  • 打赏
  • 举报
回复
一个像素点 rgb值组成

那就看你像用这个rgb当个值来干什么 比如计算灰度 有灰度的计算方法的
zgszft 2011-08-09
  • 打赏
  • 举报
回复
顶起来。。。
zgszft 2011-08-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xiaoc1026 的回复:]
m_r=m_r/colorpoint;
m_g=m_g/colorpoint;
m_b=m_b/colorpoint;
这个应该放到循环里面吧


C/C++ code

int rx,ry;
int colorpoint=bm.bmWidth*bm.bmHeight;

for(rx=0;rx<bm.bmWidth;rx++)
{
……
[/Quote]
我单独给GetRValue取过值,发现也是255
zgszft 2011-08-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ringphone 的回复:]
m_bmp是纯白色的图?
[/Quote]
任意颜色的都为255
见习学术士 2011-08-09
  • 打赏
  • 举报
回复
m_r=m_r/colorpoint;
m_g=m_g/colorpoint;
m_b=m_b/colorpoint;
这个应该放到循环里面吧


int rx,ry;
int colorpoint=bm.bmWidth*bm.bmHeight;

for(rx=0;rx<bm.bmWidth;rx++)
{
for(ry=0;ry<bm.bmHeight;ry++)
{
m_rgb=memDC.GetPixel(rx, ry);
m_r+= GetRValue(m_rgb);//R
m_g+= GetGValue(m_rgb);//G
m_b+= GetBValue(m_rgb);//B

m_r=m_r/colorpoint;
m_g=m_g/colorpoint;
m_b=m_b/colorpoint;

}
}




ringphone 2011-08-09
  • 打赏
  • 举报
回复
m_bmp是纯白色的图?

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧