BMP格式最大的特征是没有任何的压缩,因此文件尺寸比较大,不适合网络传输,但是优点是这种图像格式中的数据读取出来不需要任何解码器解码就可以直接使用.
BMP文件的数据按照从文件头开始的先后顺序分为四个部分:分别是位图文件头、位图信息头、调色板(24bit位图是没有的)、位图数据(RGB)。
可以看到,BMP文件的位图文件头和位图信息头一共为54字节大小,其中位图文件头为14字节,位图信息头为40字节。
练习:设计程序,利用系统IO读取磁盘上指定BMP图片的宽和高,以及BMP图片的大小,并输出到终端,要求图片名称通过命令行传递。
点击查看代码
#include <sys/types.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
int main(int argc,char const *argv[]){int bmp_higth = 0;int bmp_size = 0;int bmp_width = 0;//1.打开bmp图片(图片路径是从终端传输,注意验证有效性)if(2 != argc){printf("argument is invalid");return -1;}//2.打开bmp,非内核用openint bmp_fd = open(argv[1],O_RDWR);if(-1 == bmp_fd){printf("open error");return -1;}//3.从被打开的bmp中获取图像信息lseek(bmp_fd,2,SEEK_SET);read(bmp_fd,&bmp_size,4);lseek(bmp_fd,18,SEEK_SET);read(bmp_fd,&bmp_width,4);lseek(bmp_fd,22,SEEK_SET);read(bmp_fd,&bmp_higth,4);//4.输出图像信息printf("the size:%d ,the width:%d ,the higth:%d",bmp_size,bmp_width,bmp_higth);return 0;
}