[求助]关于获取位图图片的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);
}
请高手帮忙看看 谢谢!!