该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
测试程序如下:
#include
#include
int main(void)
{
int bfOffBits;//位图偏移量
int biwidth,biheight;//位图的宽度和高度
int bibitcount;//每个像素所需位数
int lineByte;//每行所占字节数
int count;
unsigned char *pBmpBuf;//指针指向新开辟的BUFFER读取数据存放地
BITMAPFILEHEADER fileHeader;//创建BIMAPFILEHEADER类型
BITMAPINFOHEADER infoHeader;//创建BITMAPINFOHEADER类型
FILE *fp=fopen("C:\\Users\\XIONGPC\\Desktop\\003.bmp","r");//打开文件BMP格式
fread(&fileHeader,sizeof(BITMAPFILEHEADER),1,fp);//读取 BMP文件头
fread(&infoHeader,sizeof(BITMAPINFOHEADER),1,fp);//读取BMP位图信息头,同时FP指针偏移
bfOffBits=fileHeader.bfOffBits;//输出偏移量
printf("位图偏移量为:%d,",bfOffBits);
bibitcount=infoHeader.biBitCount;//每个像素所需位数
biwidth=infoHeader.biWidth;//图像宽
biheight=infoHeader.biHeight;//图像高度
printf("图像宽度为:%d,高度为:%d\n",biwidth,biheight);
lineByte=biwidth/8;//图像每行所占字节数
pBmpBuf=new unsigned char[lineByte*biheight];//开辟空间并用PBMPBUF指针指向首地址
fseek(fp,62,SEEK_SET);//跳转至位图数据 ,当前FP指针位置
fread(pBmpBuf,sizeof(char),lineByte*biheight,fp);
for(int i=0;i
{
for(int j=0;j
{
unsigned short int temp=*(pBmpBuf+i*lineByte+j*2);//定义无符号短整型接受BYTE单位数据
count++;
printf("%u ",temp);//输出每字节数据以无符号十进制输出
if(count==(lineByte/2))//内层FOR跳转判断条件
{
printf("Hend\n");
count=0;//行数清零
}
}
}
fclose(fp);
}
然后用windows画图画出一个16X16像素的BMP位图1像素1位;
图形左下角2个黑色像素,右上角2个黑色像素;