使用C++如何读取各种类型的图像文件

使用版本visual studio 2012,现在要做一个跟图片解析有关的作业,需要读入诸如JPG,PNG等格式的图片,读出每个像素的RGB信息。。现在只会处理bmp文件(因为bmp没有压缩。。)。刚刚学程设,所以尽量解释地简单详细一些。重点是可以读出每个像素的RGB信息。谢谢。

以下是从文件读取图片并转换成灰度图并画在界面上的程序
重点是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"图片太大");
}
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-08-04
这个是没有现成方法的,不同图像的方法不一样,甚至没有现成的库,只能自己研究对应的图像格式自己搞的

用C++如何读取图片
1、第一步,在图片采样软件中找到软件快捷方式,然后单击以打开该软件,如下图所示,然后进入下一步。2、其次,完成上述步骤后,已经进入了取模软件,单击“载入图片”按钮以添加图片,如下图所示,然后进入下一步。3、接着,完成上述步骤后,选择要添加的图片,单击以选择图片,然后单击“打开”按钮,...

用C++完成一个程序,能读取BMP图象文件...
fileHead.bfType = 0x4D42;\/\/bmp类型 \/\/bfSize是图像文件4个组成部分之和 fileHead.bfSize= sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER)+ colorTablesize + lineByte*height;fileHead.bfReserved1 = 0;fileHead.bfReserved2 = 0;\/\/bfOffBits是图像文件前3个部分所需空间之和 fileHead.b...

摄像机标定:c++怎么读取txt文件命名的jpg格式图片,并且用于摄像机标定...
ifstream fin("calibdata.txt"); \/* 标定所用图像文件的路径 *\/ ofstream fout("caliberation_result.txt"); \/* 保存标定结果的文件 *\/ \/\/读取每一幅图像,从中提取出角点,然后对角点进行亚像素精确化 cout << "开始提取角点………"; int image_count = 0; \/* 图像数量 *\/ Size image_size; \/* ...

关于怎么用C++读取bmp图片
1、图片文件是有固定格式的,像BMP图片是文件头+位图的颜色数据。文件头一般在读取的时候是使用下面的代码:BITMAPFILEHEADER fileheader={0}; fread(&fileheader,sizeof(fileheader),1,fp); if(fileheader.bfType!=0x4D42) \/\/ 判断是否为BMP图片 { fclose(fp); return ; } ...

怎么用Visual C++读取BMP格式图像?
Bitmap文件格式...BITMAPFILEHEADER BITMAPINFOHEADER 调色板 位图数据 如果定义高度为正数则数据从下向上存储,否则从上向下。每行的数据要4字节对齐。

c++ 如何读取raw图片
如果你技术可以,这个就够了 raw 头文件可以去网上下载 参考代码:# #include "Raw.h" # # #ifdef _DEBUG # #undef THIS_FILE # static char THIS_FILE[]=__FILE__; # #define new DEBUG_NEW # #endif # # \/\/\/ # \/\/ Construction\/Destruction # \/\/\/...

C++如何读取IMG文件
FILE *f=fopen("a.img","rb");\/\/打开文件 char buffer[256 * 256];fread(buffer,256*256,1,f);\/\/读取数据 fclose(f); \/\/关闭文件 这就好了呀

纯c\/c++如何读取和写入带alpha通道32位bmp图片?不借用VC的MFC的类...
\/\/ 打开图像文件 FILE *f = fopen(strSourceFileName,"rb");if (f==NULL){ printf("Open file error!\\n");return;} \/\/ 读取文件头 fread(&bfh,sizeof(bfh),1,f);\/\/ 读取图像信息 fread(&bih,sizeof(bih),1,f);\/\/ 8位字节对齐 nAdjust = bih.biWidth%4;if (nAdjust) nAdjust...

用C++ 读取bmp信息,求代码
int biBitCount;\/\/图像类型,每像素位数 int lineByte;int datasize;BITMAPINFOHEADER head;BITMAPFILEHEADER file;RGBQUAD color[2];}bmpMaze;int readBmp(bmpMaze *maze){ int i=0;FILE *fp=fopen(maze->bmpName,"rb");if(fp==NULL){ printf("File is not found !!\\n");return 0;} frea...

【C\/C++】如何读入32位bmp图像存到数组再写出来
参考地址:http:\/\/blog.csdn.net\/wsfdl\/article\/details\/7957370#include <stdio.h>#include <stdlib.h>#define BITMAPFILEHEADERLENGTH 14 \/\/ The bmp FileHeader length is 14#define BM 19778 \/\/ The ASCII code for BM\/* Test the file is bmp file or not *\/void bmpFileTest(FILE*...

相似回答