C++如何读取bmp图篇

int main(){ //char strFile[LENGTH_NAME_BMP];//bmp文件名
IMAGEDATA *imagedata = NULL;//动态分配存储原图片的像素信息的二维数组
IMAGEDATA *imagedataRot = NULL;//动态分配存储旋转后的图片的像素信息的二维数组
int width,height;//图片的宽度和高度
//cout<<"请输入所要读取的文件名:"<<endl;
//cin>>strFile;
FILE *fpi;
//errno_t err;
err = fopen_s( &fpi, "D:\\a00.bmp", "rb" );
//fpi= fopen( "D:\\a00.bmp", "rb" );
if (err!=0)
cout<< "The file 'data' was not opened"<<endl ;
else
cout<< "The file 'data' was opened\n" <<endl;

////////////////////
if(fpi != NULL){
//先读取文件类型
WORD bfType;
fread(&bfType,1,sizeof(WORD),fpi);
if(0x4d42!=bfType)
{
cout<<"the file is not a bmp file!"<<endl;
return NULL;
}
cout<<bfType<<endl; //读取bmp文件的文件头和信息头
fread(&strHead,sizeof(tagBITMAPFILEHEADER),1,fpi);
showBmpHead(strHead);//显示文件头

fread(&strInfo,sizeof(tagBITMAPINFOHEADER),1,fpi);
showBmpInforHead(strInfo);//显示文件信息头

}

书上说的保留字1,和保留字2,都应该是0 啊,为啥我的不是?
图片的长宽是1300*768. , 程序显示高时1572865了,,求高手指点

tagBITMAPFILEHEADER 里面包含了type吧, 你先fread了type,所以数据往后移了
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-10-17
读错位置了吧

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

如何用c++语言实现对bmp二值图像数据的访问?
1.图片也是属于文件类型的一种,图片属于二进制文件。使用fopen函数的二进制模式“rb”就可以打开。2.例程:include <stdlib.h> #include <stdio.h> int main () { FILE * fpPhoto, * fpText, * fpTarget ; int iRead ; char szBuf[100] ; printf ("请输入第...

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

用C++ 读取bmp信息,求代码
maze->datasize=maze->file.bfSize-maze->file.bfOffBits-2;maze->bmp=(char *)malloc(maze->datasize*sizeof(char));fread(maze->bmp,maze->datasize,1,fp);fclose(fp);return 1;} void MazeToArray(bmpMaze maze){ \/\/将图片像素信息读取到Ma数组中 int status,i=0,x,y,n=8,j=0,li...

求助c++读取BMP文件
bmp文件分为四个部分:文件信息头、位图信息头、调色板、位图信息数据。你在读信息头文件后,应该读调色板数据。对于真彩色图像,因为没有调色板,所以不用读;但对于其他的图像就需要读了。这是你的代码存在的问题之一。解决办法是根据biBitCount的值判断调色板的大小:若biBitCount为1,调色板大小为2*...

用c++编写的读取bmp图中任意一像素点的RGB值的代码
控制台 读取BMP图片文件 输出指定点的颜色分量 include <stdio.h> include <stdlib.h> include <malloc.h> typedef unsigned long DWORD;typedef int BOOL;typedef unsigned char BYTE;typedef unsigned short WORD;typedef struct tagBITMAPINFOHEADER{ DWORD biSize;long biWidth;long ...

如何用VISUAL C++打开BMP图像?求源代码
你首先需要了解bmp文件的文件结构。1)前面14个字节是 文件头 ——c++中有一个结构体 bitmapfileheader 与其对应 2)接下来的40个字节 是位图信息头 ——c++中有一个结构体 bitmapinfoheader 与其对应 3)再接下来就是调色板——字节数和你所用的文件的颜色总数有关,例如,256色,就有256条记录;...

如何使用C++的读取文件流读取一个24位真彩色的BMP文件到一个数组当中...
1.读取文件。使用System.IO命名空间加的一个类库。读取一个文件可以按文本的方式读取,也可以按二进制流的方式读取,按二进制流的方式读取,返回的结果就是一个字节数组。byte[] bmps = System.IO.File.ReadAllBytes("a.bmp");2.所谓路径。路径是文件系统的一个概念,对于一个Windows文件系统来说,...

【C\/C++】如何读入32位bmp图像存到数组再写出来
\/* To get the OffSet of header to data part *\/void bmpHeaderPartLength(FILE* fpbmp);\/* To get the width and height of the bmp file *\/void BmpWidthHeight(FILE* fpbmp);\/\/get r,g,b datavoid bmpDataPart(FILE* fpbmp);\/\/ output data to corresponding txt filevoid bmp...

如何用c++载入bmp图片,然后获取图片上鼠标点到的点的坐标并存储起来...
用LoadBitmap()载入,用BitBlt()显示,可以控制在窗口的什么位置显示图片,然后得到当前坐标点在屏幕上的位置GetCursorPos(),再转换成窗口坐标ScreenToClient(HWND hWnd,LPPOINT lpPoint),再根据你把图片放在了什么位置,就可以计算出当前点在图片的什么位置了。一点建议,希望对你有用。

相似回答
大家正在搜