[求助]关于获取位图图片的RGB值后,不能保存成.TXT文件

wdswu 2005-07-25 10:51:06
我建了个MFC的单文档工程用来取得位图某点的像素值,且准备把值保存在RGB.txt文件中.... 执行时如果不读入位图,直接在视图区(白色背景)采集值能正确保存(当然值都是255,255,255)....,但是在读入位图到视图区后,虽可以取得图像RGB值,但是程序就是不能把值保存到.txt文件中,调试时发现和不读入位图的执行过程一样,也就是说取RGB值和存为.txt文件的2段代码都执行了的. 为什么前者能生成.txt文件 后者不能呢?

//这是打开位图文件的代码
void CGetPixelView::OnFileOpen()
{
// TODO: Add your command handler code here
mouse_up = 0;//鼠标采点时左键点击次数
static char szFilter[] = "BMP Files(*.BMP) | *.BMP||";
CFileDialog FileDlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,szFilter);
//用自己的位图处理类CDib的对象m_Dib调用成员函数Load()来载入位图
if(FileDlg.DoModal() == IDOK && m_Dib.Load(FileDlg.GetPathName()))
{
InvalidateRect(NULL,FALSE);
UpdateWindow();

}

}


//这是在鼠标左键松开时的采点和写入.txt文件
void CGetPixelView::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
COLORREF rgb = 0x00000000;
CDC* pDC = GetDC();
//鼠标点击次数小于pointCount时执行if代码
if(mouse_up<pointCount)
{//此段代码用来采集鼠标松开时位置的像素RGB值, 并保存在rgbValue[][]数组中
rgb = pDC->GetPixel(point);
CString ClrText;
ClrText.Format("第%d点{ R:%d G:%d B:%d }",mouse_up+1,GetRValue(rgb),GetGValue(rgb),GetBValue(rgb));
pDC->TextOut(800,600,ClrText);
// MessageBox("测试");
rgbValue[mouse_up][0] = GetRValue(rgb);
rgbValue[mouse_up][1] = GetGValue(rgb);
rgbValue[mouse_up][2] = GetBValue(rgb);
mouse_up++;
}
//鼠标点击次数等于pointCount时执行else代码,用来把rgbValue[][]数组中采集到的值
//输出到文件RGB.txt中
else if(mouse_up == pointCount)
{

ofstream output;
output.open("RGB.txt");
output<<" R G B"<<endl;
//输出rgbValue[i][j]值到RGB.txt文件中
for(int i=0;i<pointCount;i++)
{
output<<"点"<<i+1<<": {";
for(int j=0;j<3;j++)
{
output<<rgbValue[i][j];
if(j<2) output<<",";
}
output<<"}"<<endl;
}
output.close();
mouse_up++;
MessageBox("采点结束");

}


CView::OnLButtonUp(nFlags, point);
}


请高手帮忙看看 谢谢!!
...全文
197 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wdswu 2005-07-27
  • 打赏
  • 举报
回复
学艺不精 惭愧惭愧 ,道路漫长,吾将锲而不舍,上下求索
bobob 2005-07-27
  • 打赏
  • 举报
回复
唉,又是一个马大哈
wdswu 2005-07-27
  • 打赏
  • 举报
回复
问题找到了 原来是打开位图前,输出的文件保存在程序目录下,而打开位图后,输出的文件保存在图片所在的目录下了
wdswu 2005-07-26
  • 打赏
  • 举报
回复
我 输出的 是通过pDC->GetPixel(point) 取得的 像素值,不是图片本身的数据....
cnwww 2005-07-26
  • 打赏
  • 举报
回复
图像数据是二进制值,二种选择:
1.将二进制转换成字符串输出;
2.文件打开方式改成二进制输出。
wdswu 2005-07-26
  • 打赏
  • 举报
回复
有变化的啊 :"读入位图到视图区后,虽可以取得图像RGB值,但是程序就是不能把值保存到.txt文件中"
我调试了 读入位图后采点 图像上的值保存在rgbValue[][]数组中,在输出循环:
for(int j=0;j<3;j++)
{
output<<rgbValue[i][j];
if(j<2) output<<",";
}
中设置断点 可以清楚看到rgbValue[][]数组中的值(非白色的RGB值)
cnwww 2005-07-26
  • 打赏
  • 举报
回复
两种情况下pDC->TextOut(800,600,ClrText);输出的值有变化吗?
becool3000 2005-07-26
  • 打赏
  • 举报
回复
看了一遍
晕!有难度
帮不上忙!

19,468

社区成员

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

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