zoukankan      html  css  js  c++  java
  • [代码片段]读取BMP文件(二)

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 
     4 #pragma pack(2)
     5 
     6 /*定义WORD为两个字节的类型*/
     7 typedef unsigned short WORD;
     8 /*定义DWORD为e四个字节的类型*/
     9 typedef unsigned long DWORD;
    10 
    11 /*位图文件头*/
    12 typedef struct BMP_FILE_HEADER
    13 {
    14     WORD bType;             /*  文件标识符          */
    15     DWORD bSize;            /*  文件的大小          */
    16     WORD bReserved1;        /*  保留值,必须设置为0  */       
    17     WORD bReserved2;        /*  保留值,必须设置为0  */
    18     DWORD bOffset;          /*  文件头的最后到图像数据位开始的偏移量    */
    19 } BMPFILEHEADER;
    20 
    21 /*位图信息头*/
    22 typedef struct BMP_INFO
    23 {
    24     DWORD bInfoSize;       /*  信息头的大小             */
    25     DWORD bWidth;          /*  图像的宽度               */
    26     DWORD bHeight;         /*  图像的高度               */
    27     WORD bPlanes;          /*  图像的位面数             */
    28     WORD bBitCount;        /*  每个像素的位数           */
    29     DWORD bCompression;    /*  压缩类型                 */
    30     DWORD bmpImageSize;    /*  图像的大小,以字节为单位  */
    31     DWORD bXPelsPerMeter;  /*  水平分辨率               */
    32     DWORD bYPelsPerMeter;  /*  垂直分辨率               */
    33     DWORD bClrUsed;        /*  使用的色彩数             */
    34     DWORD bClrImportant;   /*  重要的颜色数             */
    35 } BMPINF;
    36 
    37 /*彩色表*/
    38 typedef struct RGB_QUAD 
    39 {
    40     WORD rgbBlue;         /*  蓝色强度  */
    41     WORD rgbGreen;        /*  绿色强度  */
    42     WORD rgbRed;          /*  红色强度  */
    43     WORD rgbReversed;     /*  保留值    */
    44 } RGBQUAD;
    45 
    46 int main()
    47 {
    48     FILE *fp;
    49     BMPFILEHEADER fileHeader;
    50     BMPINF infoHeader;
    51     long offset, bmpImageSize, width, height, bytesPerPixel, size, bitCount;
    52     //    int i, j;
    53     //    unsigned char **p;
    54     WORD c;
    55 
    56     if((fp = fopen("C:\Users\Mirgo\Desktop\5.bmp", "rb")) == NULL)
    57     {
    58         printf("Cann't open the file!
    ");
    59         exit(0);
    60     }
    61 
    62     fseek(fp, 0, 0);
    63     fread(&fileHeader, sizeof(fileHeader), 1, fp);
    64     fread(&infoHeader, sizeof(infoHeader), 1, fp);
    65 
    66     //计算并输出位图数据的偏移量,图像的大小,宽度和高度,每个像素点所占的字节
    67     size = fileHeader.bSize;
    68     offset = fileHeader.bOffset;
    69     bmpImageSize = infoHeader.bmpImageSize;
    70     width = infoHeader.bWidth;
    71     height = infoHeader.bHeight;
    72     bitCount = infoHeader.bBitCount;
    73     bytesPerPixel = infoHeader.bBitCount / 8;
    74 
    75     printf("%d %d %d %d %d %d %d
    ", size, offset, bmpImageSize, width, height, bitCount, bytesPerPixel);
    76 
    77     //输出每个像素点所占字节中的内容
    78     c = fgetc(fp);
    79     while (!feof(fp))
    80     {
    81         printf("%x", c>0?1:0);
    82         c = fgetc(fp);
    83     }
    84 
    85     printf("
    ");
    86 
    87     system("pause");
    88 
    89     fclose(fp);
    90 
    91     return 0;
    92 }
  • 相关阅读:
    linux环境下zookeeper下载安装
    vue父组件传值给子组件
    nginx配置负载均衡
    centos安装与配置keepalived+nginx高可用
    centos7安装jdk1.8
    linux系统centos7安装最新版本nginx
    vue项目简单菜单排序
    原生js复制粘贴上传图片前后台代码,兼容firebox,chrome, ie11,亲测有效
    mysql字符集与比较规则
    EL和JSTL表达式的使用
  • 原文地址:https://www.cnblogs.com/rongfangliu/p/Code_ReadBMP2.html
Copyright © 2011-2022 走看看