RGB三原色是不是可能有负值?怎么将24色图像转化为图像矩阵?

左老师的小迷弟 2013-04-19 06:07:38

void CLCLRView::writeimage()
2 {
3
4 LPSTR lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) m_hDib);
5 int lineByte=(m_Width*m_BitCount/8+3)/4*4;
6 int imageSize =lineByte*m_Height;
7 int i,j;
11 CString str1;
12 ofstream outfile("C:/Users/Administrator/Desktop/图像像素.txt",ios::in|ios::trunc);
13 for(i=0;i<m_Height;i++)
14 {
15 for(j=0;j<m_Width;j++)
16 {
17 str1.Format("%d*%d*%d",*(lpDIB+i*lineByte+j*3+0),*(lpDIB+i*lineByte+j*3+1),*(lpDIB+i*lineByte+j*3+2));
20 outfile<<str1<<" ";
21 }
22 outfile<<endl;
23 }
24
25 ::GlobalUnlock((HGLOBAL) m_hDib);
26 }




各位高手这是我写的代码,m_hDib是DIB图像句柄,、lpDIB得到图像信息位,通过调用图像信息位查看,该BMP图像每一像素的RGB三原色值,但是奇怪的发现竟然有负数。请问这是什么原因啊?


问题二:VC++ 处理图像,必须将24色真彩图像转化为灰度图,建立灰度图得到灰度矩阵才可以进行之后的处理,是不是每一像素的灰度Y=0.299R+0.587G+0.114B ,通过计算每一点Y值得到图像灰度矩阵从而进行计算和处理???
...全文
995 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
谢谢了 我试试
青松2 2013-04-27
  • 打赏
  • 举报
回复
上面写错了,应该是这个:
str1.Format("%d*%d*%d",*(uchar*)(lpDIB+i*lineByte+j*3+0),*(uchar*)(lpDIB+i*lineByte+j*3+1),*(uchar*)(lpDIB+i*lineByte+j*3+2));
青松2 2013-04-27
  • 打赏
  • 举报
回复
试试:
str1.Format("%d*%d*%d",*(uchar)(lpDIB+i*lineByte+j*3+0),*(uchar)(lpDIB+i*lineByte+j*3+1),*(uchar)(lpDIB+i*lineByte+j*3+2));
问题二你理解正确

1,451

社区成员

发帖
与我相关
我的任务
社区描述
多媒体/设计/Flash/Silverlight 开发 图象工具使用
社区管理员
  • 图象工具使用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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