音视频数据处理(-2)linux下自定义bmp头输出bmp的信息

来源:互联网 发布:暴力破解linux密码 编辑:程序博客网 时间:2024/05/15 13:09

windows下提供了windows.h头文件,里面包含了bmp的文件头结构体和信息头结构体,而linux下没有,我们仿照它自己定义了这两个结构体,实现linux下输出bmp图像的文件头和信息头的·信息。

#include<stdio.h>  

#include<string.h>  
#include<sys/types.h>  
  
#include <iostream>  
  
#pragma pack(2)  
  
using namespace std;  
  
//下面两个结构是位图的结构  
typedef struct BITMAPFILEHEADER  
{   
    u_int16_t bfType;   
    u_int32_t bfSize;   
    u_int16_t bfReserved1;   
    u_int16_t bfReserved2;   
    u_int32_t bfOffBits;   
}BITMAPFILEHEADER;   
  
typedef struct BITMAPINFOHEADER  
{   
    u_int32_t biSize;   
    u_int32_t biWidth;   
    u_int32_t biHeight;   
    u_int16_t biPlanes;   
    u_int16_t biBitCount;   
    u_int32_t biCompression;   
    u_int32_t biSizeImage;   
    u_int32_t biXPelsPerMeter;   
    u_int32_t biYPelsPerMeter;   
    u_int32_t biClrUsed;   
    u_int32_t biClrImportant;   
}BITMAPINFODEADER;  
  
void showBmpHead(BITMAPFILEHEADER &pBmpHead){    
    cout<<"位图文件头:"<<endl;    
    cout<<"文件头类型:"<<pBmpHead.bfType<<endl;    
    cout<<"文件大小:"<<pBmpHead.bfSize<<endl;    
    cout<<"保留字_1:"<<pBmpHead.bfReserved1<<endl;    
    cout<<"保留字_2:"<<pBmpHead.bfReserved2<<endl;    
    cout<<"实际位图数据的偏移字节数:"<<pBmpHead.bfOffBits<<endl<<endl;    
}    
    
void showBmpInforHead(BITMAPINFODEADER &pBmpInforHead){    
    cout<<"位图信息头:"<<endl;    
    cout<<"结构体的长度:"<<pBmpInforHead.biSize<<endl;    
    cout<<"位图宽:"<<pBmpInforHead.biWidth<<endl;    
    cout<<"位图高:"<<pBmpInforHead.biHeight<<endl;    
    cout<<"biPlanes平面数:"<<pBmpInforHead.biPlanes<<endl;    
    cout<<"biBitCount采用颜色位数:"<<pBmpInforHead.biBitCount<<endl;    
    cout<<"压缩方式:"<<pBmpInforHead.biCompression<<endl;    
    cout<<"biSizeImage实际位图数据占用的字节数:"<<pBmpInforHead.biSizeImage<<endl;    
    cout<<"X方向分辨率:"<<pBmpInforHead.biXPelsPerMeter<<endl;    
    cout<<"Y方向分辨率:"<<pBmpInforHead.biYPelsPerMeter<<endl;    
    cout<<"使用的颜色数:"<<pBmpInforHead.biClrUsed<<endl;    
    cout<<"重要颜色数:"<<pBmpInforHead.biClrImportant<<endl;    
}   
  
int main( int argc, char **argv )  
{  
    FILE *fp = fopen(argv[1], "rb");  
  
    BITMAPFILEHEADER head;  
    BITMAPINFODEADER info;  
  
    fread(&head, 1, sizeof(BITMAPFILEHEADER), fp);  
    fread(&info, 1, sizeof(BITMAPINFODEADER), fp);  
  
    showBmpHead(head);  
    showBmpInforHead(info);  
  
    cout<<sizeof(BITMAPFILEHEADER)<<endl; cout<<sizeof(BITMAPINFODEADER)<<endl;   
  
    fclose(fp);  
  
    return 0;  

}  

g++ a.c 


原创粉丝点击