使用C++如何读取各种类型的图像文件
使用版本visualstudio2012,现在要做一个跟图片解析有关的作业,需要读入诸如JPG,PNG等格式的图片,读出每个像素的RGB信息。。现在只会处理bmp文件(因...
使用版本visual studio 2012,现在要做一个跟图片解析有关的作业,需要读入诸如JPG,PNG等格式的图片,读出每个像素的RGB信息。。现在只会处理bmp文件(因为bmp没有压缩。。)。刚刚学程设,所以尽量解释地简单详细一些。重点是可以读出每个像素的RGB信息。谢谢。
展开
2个回答
展开全部
以下是从文件读取图片并转换成灰度图并画在界面上的程序
重点是pixel=img.GetPixel(x,y);这句,lz可以参考一下
JPG,BMP,PNG三种图片都测试过没问题,其他格式的没测试过
CClientDC dc(this);
CFileDialog file(true,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,_T("JPG(*.JPG)|*.JPG|BMP(*.BMP)|*.BMP|PNG(*.PNG)|*.PNG||"),NULL);
if(file.DoModal()==IDOK)
{
//MessageBox(file.GetPathName());
CImage img;
img.Load(file.GetPathName());
int g;
if(img.GetWidth()<1000 && img.GetHeight()<1000)
{
int size= img.GetWidth()*img.GetHeight();
int up=0;
double g;
COLORREF pixel;
for(int x=0;x<img.GetWidth();++x)
{
for(int y=0;y<img.GetHeight();++y)
{
pixel=img.GetPixel(x,y);
if( ((int)( (GetRValue(pixel)+GetGValue(pixel)+GetBValue(pixel))/3 )) >=128) ++up;
g=int((GetRValue(pixel)+GetGValue(pixel)+GetBValue(pixel))/3);
img.SetPixel(x,y,RGB(g,g,g));
}
}
g=(double(up*100))/(double(size));
CString ts;
ts.Format(L"%d/%d(%lf%%)",up,size,g);
//MessageBox(ts);
//img.Save(L"d:\\1.jpg");
img.Draw(dc,5,5);
}
else
{
MessageBox(L"图片太大");
}
}
重点是pixel=img.GetPixel(x,y);这句,lz可以参考一下
JPG,BMP,PNG三种图片都测试过没问题,其他格式的没测试过
CClientDC dc(this);
CFileDialog file(true,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,_T("JPG(*.JPG)|*.JPG|BMP(*.BMP)|*.BMP|PNG(*.PNG)|*.PNG||"),NULL);
if(file.DoModal()==IDOK)
{
//MessageBox(file.GetPathName());
CImage img;
img.Load(file.GetPathName());
int g;
if(img.GetWidth()<1000 && img.GetHeight()<1000)
{
int size= img.GetWidth()*img.GetHeight();
int up=0;
double g;
COLORREF pixel;
for(int x=0;x<img.GetWidth();++x)
{
for(int y=0;y<img.GetHeight();++y)
{
pixel=img.GetPixel(x,y);
if( ((int)( (GetRValue(pixel)+GetGValue(pixel)+GetBValue(pixel))/3 )) >=128) ++up;
g=int((GetRValue(pixel)+GetGValue(pixel)+GetBValue(pixel))/3);
img.SetPixel(x,y,RGB(g,g,g));
}
}
g=(double(up*100))/(double(size));
CString ts;
ts.Format(L"%d/%d(%lf%%)",up,size,g);
//MessageBox(ts);
//img.Save(L"d:\\1.jpg");
img.Draw(dc,5,5);
}
else
{
MessageBox(L"图片太大");
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询