用C++ 读取bmp信息,求代码

现在C++ 程序中需要这样一个模块: 输入一个文件指针,一个二维数组地址,两个整数表示对象范围,需要将图片中相应区域的信息存入数组。
图片的大小是已知的,图片只有黑白两种颜色。数组中存01,
temp[100][100];

void GetMat(FILE * f, int *temp,int r, int l)
{
????
}

课程项目急用 谢谢
速填有加分

这个可以用,你试试:

#include "stdio.h"
#include "Windows.h"
#include "stdlib.h"
#include "math.h"

int Ma[200][200];

typedef struct bmpMaze
{
char *bmp;//图像指针
char *bmpName;//图像路径
int width;//宽
int height;//图像的高
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;
}

fread(&(maze->file), sizeof(BITMAPFILEHEADER), 1,fp);
fread(&(maze->head), sizeof(BITMAPINFOHEADER), 1,fp);
fread(&(maze->color), 8, 1,fp);

maze->width = maze->head.biWidth;
maze->height = maze->head.biHeight;
maze->biBitCount = maze->head.biBitCount;
maze->lineByte=(maze->width+8-maze->width%8)/8;
if(maze->width%8==0)
maze->lineByte--;
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,line;
line=maze.datasize/maze.height;
for(x=maze.height-1;x>=0;x--)
{
for(y=0;y<maze.width;y++)
{
//获取这个点是黑的还是白的
status=maze.bmp[i]&(int)pow(2,n-1);
if(!status)
Ma[x][y]='.';
else
Ma[x][y]='@';
n--;
if(n==0)
{
n=8;
i++;
}
}
i=i+(line-maze.lineByte+1);
n=8;
}
}

void printMaze(bmpMaze maze)
{
int x=0,y=0;
for(x=0;x<maze.height;x++)
{
for(y=0;y<maze.width;y++)
printf("%c",Ma[x][y]);
printf("\n");
}
}

void main()
{
bmpMaze maze;
maze.bmpName="c:\\test.bmp";
readBmp(&maze);
MazeToArray(maze);
printMaze(maze);

}

参考资料:http://www.cnblogs.com/lxstar/archive/2011/12/18/2205880.html

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-03-14
百度一下,网上大把呀。追问

帮我度一下呗,就是找不到才来问的嘛
度出来分给你

追答

http://wenku.baidu.com/view/91b0d3c6aa00b52acfc7ca84.html

追问

不要MFC可以吗?

追答

当然可以。和MFC没有任何关系的。

用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图中任意一像素点的RGB值的代码
} BITMAPINFOHEADER;int ReadBmp(const char* szFileName);int GetDIBColor(int X, int Y, BYTE *r, BYTE *g, BYTE *b);BITMAPINFOHEADER bih;BYTE *Buffer = NULL;long LineByteWidth;int main(void){ int x, y;BYTE r, g, b;int n;char szfilename[255] = "c:\\\\1.bmp";if...

用C++完成一个程序,能读取BMP图象文件...
fread(pBmpBuf,1,lineByte * bmpHeight,fp);fclose(fp);\/\/关闭文件 return 1;\/\/读取文件成功 } \/\/--- \/\/给定一个图像位图数据、宽、高、颜色表指针及每像素所占的位数等信息,将其写到指定文件中 bool saveBmp(char *bmpName, unsigned char *imgBuf, int width, int height,int biBitCount...

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

用C或C++怎样提取出bmp图像的像素点信息值?用LSB算法做信息隐藏,位图是...
int bit=m_Image.GetBPP();\/\/获取每点像素的位数(8,24,32等),如果只处理24位图,则bit可直接赋值为24 int width=m_Image.GetWidth();\/\/图像的宽度(单位为像素)int height=m_Image.GetHeight();\/\/图像的长度(单位为像素)HBITMAP bitmap = m_Image.Detach();\/\/ CBitmap *b_Image=...

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

求c\/c++读取32位带alpha通道bmp并返回指向bmp的位图数据的代码,请高手...
void CxImage::Bitfield2RGB(BYTE *src, WORD redmask, WORD greenmask, WORD bluemask, BYTE bpp){ switch (bpp){ case 16:break;case 32:{ \/\/ dword aligned width for 32 bit image long effwidth4 = head.biWidth * 4;long y4, y3, x4, x3;BYTE * p = info.pImage; \/\/指向...

如何用VISUAL C++打开BMP图像?求源代码
MFC的话可以用CBITMAP类来处理bmp,读取的话用win32 api loadimage();平滑不理解,平滑移动?简单点设置个后台缓冲,俗称double buffer 二值化的话先把彩色RGB的转化为黑白,比较常用的是转成亮度 Luminance=0.3 R + 0.59 G + 0.11 B,亮度的范围是0-255,把RBG都设置成亮度值,显示出来的就...

如何用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文件系统来说,...

相似回答