亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

C語言讀取BMP圖像數據的源碼

2020-01-26 16:20:50
字體:
來源:轉載
供稿:網友

復制代碼 代碼如下:

/* File name:   bmpTest.c
   Author:      WanChuan XianSheng
   Date:        Oct 01, 2011
   Description: Show all Info a bmp file has. including
   FileHeader Info, InfoHeader Info and Data Part.

   Reference: BMP圖像數據的C語言讀取源碼
*/

#include <stdio.h>
#include <stdlib.h>

#define BITMAPFILEHEADERLENGTH 14   // The bmp FileHeader length is 14
#define BM 19778                    // The ASCII code for BM

/* Test the file is bmp file or not */
void bmpFileTest(FILE* fpbmp);
/* To get the OffSet of header to data part */
void bmpHeaderPartLength(FILE* fpbmp);
/* To get the width and height of the bmp file */
void BmpWidthHeight(FILE* fpbmp);
/* Show bmp file tagBITMAPFILEHEADER info */
void bmpFileHeader(FILE* fpbmp);
/* Show bmp file tagBITMAPINFOHEADER info */
void bmpInfoHeader(FILE* fpbmp);
/* Show the Data Part of bmp file */
void bmpDataPart(FILE* fpbmp);

unsigned int OffSet = 0;    // OffSet from Header part to Data Part
long BmpWidth = 0;          // The Width of the Data Part
long BmpHeight = 0;         // The Height of the Data Part


int main(int argc, char* argv[])
{
     /* Open bmp file */
     FILE *fpbmp = fopen("lena.bmp", "r+");
     if (fpbmp == NULL)
     {
      fprintf(stderr, "Open lena.bmp failed!!!/n");
      return 1;
     }

     bmpFileTest(fpbmp);                //Test the file is bmp file or not
     bmpHeaderPartLength(fpbmp);        //Get the length of Header Part
     BmpWidthHeight(fpbmp);             //Get the width and width of the Data Part
     //bmpFileHeader(fpbmp);            //Show the FileHeader Information
     //bmpInfoHeader(fpbmp);            //Show the InfoHeader Information
     bmpDataPart(fpbmp);                //Reserve the data to file

     fclose(fpbmp);
     return 0;
}

/* Test the file is bmp file or not */
void bmpFileTest(FILE* fpbmp)
{    
     unsigned short bfType = 0;
     fseek(fpbmp, 0L, SEEK_SET);
     fread(&bfType, sizeof(char), 2, fpbmp);
     if (BM != bfType)
     {
      fprintf(stderr, "This file is not bmp file.!!!/n");
      exit(1);
     }
}

/* To get the OffSet of header to data part */
void bmpHeaderPartLength(FILE* fpbmp)
{
     fseek(fpbmp, 10L, SEEK_SET);
     fread(&OffSet, sizeof(char), 4, fpbmp);   
     //printf("The Header Part is of length %d./n", OffSet);
}

/* To get the width and height of the bmp file */
void BmpWidthHeight(FILE* fpbmp)
{
     fseek(fpbmp, 18L, SEEK_SET);
     fread(&BmpWidth, sizeof(char), 4, fpbmp);
     fread(&BmpHeight, sizeof(char), 4, fpbmp);
     //printf("The Width of the bmp file is %ld./n", BmpWidth);
     //printf("The Height of the bmp file is %ld./n", BmpHeight);
}

/* Show bmp file tagBITMAPFILEHEADER info */
void bmpFileHeader(FILE* fpbmp)
{
     unsigned short bfType;              //UNIT        bfType;
     unsigned int   bfSize;              //DWORD       bfSize;
     unsigned short bfReserved1;         //UINT        bfReserved1;
     unsigned short bfReserved2;         //UINT        bfReserved2;
     unsigned int   bfOffBits;           //DWORD       bfOffBits;

     fseek(fpbmp, 0L, SEEK_SET);

     fread(&bfType,      sizeof(char), 2, fpbmp);
     fread(&bfSize,      sizeof(char), 4, fpbmp);
     fread(&bfReserved1, sizeof(char), 2, fpbmp);
     fread(&bfReserved2, sizeof(char), 2, fpbmp);
     fread(&bfOffBits,   sizeof(char), 4, fpbmp);

     printf("************************************************/n");
     printf("*************tagBITMAPFILEHEADER info***********/n");
     printf("************************************************/n");
     printf("bfType              is %d./n", bfType);
     printf("bfSize              is %d./n", bfSize);
     printf("bfReserved1         is %d./n", bfReserved1);
     printf("bfReserved2         is %d./n", bfReserved2);
     printf("bfOffBits           is %d./n", bfOffBits);
}

/* Show bmp file tagBITMAPINFOHEADER info */
void bmpInfoHeader(FILE* fpbmp)
{
     unsigned int biSize;              // DWORD        biSize;
     long         biWidth;                // LONG         biWidth;
     long         biHeight;               // LONG         biHeight;
     unsigned int biPlanes;               // WORD         biPlanes;
     unsigned int biBitCount;             // WORD         biBitCount;
     unsigned int biCompression;          // DWORD        biCompression;
     unsigned int biSizeImage;            // DWORD        biSizeImage;
     long         biXPelsPerMerer;        // LONG         biXPelsPerMerer;
     long           biYPelsPerMerer;        // LONG         biYPelsPerMerer;
     unsigned int biClrUsed;              // DWORD        biClrUsed;
     unsigned int biClrImportant;         // DWORD        biClrImportant;

     fseek(fpbmp, 14L, SEEK_SET);

     fread(&biSize,          sizeof(char), 4, fpbmp);
     fread(&biWidth,         sizeof(char), 4, fpbmp);
     fread(&biHeight,        sizeof(char), 4, fpbmp);
     fread(&biPlanes,        sizeof(char), 4, fpbmp);
     fread(&biBitCount,      sizeof(char), 4, fpbmp);
     fread(&biCompression,   sizeof(char), 4, fpbmp);
     fread(&biSizeImage,     sizeof(char), 4, fpbmp);
     fread(&biXPelsPerMerer, sizeof(char), 4, fpbmp);
     fread(&biYPelsPerMerer, sizeof(char), 4, fpbmp);
     fread(&biClrUsed,       sizeof(char), 4, fpbmp);
     fread(&biClrImportant,  sizeof(char), 4, fpbmp);

     printf("************************************************/n");
     printf("*************tagBITMAPINFOHEADER info***********/n");
     printf("************************************************/n");
     printf("biSize              is %d. /n", biSize);
     printf("biWidth             is %ld./n", biWidth);
     printf("biHeight            is %ld./n", biHeight);
     printf("biPlanes            is %d. /n", biPlanes);
     printf("biBitCount          is %d. /n", biBitCount);
     printf("biCompression       is %d. /n", biCompression);
     printf("biSizeImage         is %d. /n", biSizeImage);
     printf("biXPelsPerMerer     is %ld./n", biXPelsPerMerer);
     printf("biYPelsPerMerer     is %ld./n", biYPelsPerMerer);
     printf("biClrUsed           is %d. /n", biClrUsed);
     printf("biClrImportant      is %d. /n", biClrImportant);
}

/* Show the Data Part of bmp file */
void bmpDataPart(FILE* fpbmp)
{
     int i, j;
     unsigned char bmpPixel[BmpWidth][BmpHeight];
     unsigned char* bmpPixelTmp = NULL;
     FILE* fpDataBmp;

     /* New a file to save the data matrix */
     if((fpDataBmp=fopen("bmpData.dat","w+")) == NULL)
     {
      fprintf(stderr, "Failed to construct file bmpData.dat.!!!");
      exit(1);
     }

     fseek(fpbmp, OffSet, SEEK_SET);
     if ((bmpPixelTmp=(unsigned char*)malloc(sizeof(char)*BmpWidth*BmpHeight))==NULL)
     {
      fprintf(stderr, "Data allocation failed.!!!/n");
      exit(1);
     }
     fread(bmpPixelTmp, sizeof(char), BmpWidth*BmpHeight, fpbmp);

     /* Read the data to Matrix and save it in file bmpData.dat */
     for(i =0; i < BmpHeight; i++)
     {
      fprintf(fpDataBmp, "The data in line %-3d:/n", i+1);
      for(j = 0; j < BmpWidth; j++)
      {
           bmpPixel[i][j] = bmpPixelTmp[BmpWidth*(BmpHeight-1-i)+j];
           //fwrite(&chartmp, sizeof(char), 1, fpDataBmp);
           fprintf(fpDataBmp, "%-3d ", bmpPixel[i][j]);
           if ((j+1)%32 == 0)
           {
            fprintf(fpDataBmp, "/n");
           }
      }
     }
     /* Used to test the data read is true or false
    You can open the file using Matlab to compare the data */
     //printf("bmpPixel[2][3]   is %d./n", bmpPixel[2][3]);
     //printf("bmpPixel[20][30] is %d./n", bmpPixel[20][30]);

     free(bmpPixelTmp);
     fclose(fpDataBmp);
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品久久久久久亚洲影视| 亚洲美女av电影| 尤物精品国产第一福利三区| 91精品国产91久久久久久不卡| 久久久久亚洲精品| 欧美午夜宅男影院在线观看| 欧美区二区三区| 自拍偷拍亚洲区| 日本道色综合久久影院| 久久精品99久久久香蕉| 欧美日韩午夜视频在线观看| 国产精品天天狠天天看| 日韩二区三区在线| 午夜精品久久久久久久男人的天堂| 精品一区二区三区四区在线| 久久最新资源网| 国产精品男人爽免费视频1| 国产91精品久| 国产91精品久久久久久久| 日韩精品极品在线观看播放免费视频| 色视频www在线播放国产成人| 国产成人精品久久久| 欧美与欧洲交xxxx免费观看| 精品亚洲一区二区三区在线观看| 欧美一级片在线播放| 亚洲aaa激情| 国产成人综合一区二区三区| 欧美—级高清免费播放| 国产亚洲一区二区精品| 国产精品av网站| 欧美激情中文字幕乱码免费| 亚洲免费成人av电影| 最新69国产成人精品视频免费| 欧美乱大交xxxxx| 精品国产欧美成人夜夜嗨| 97av在线视频| 国产精品视频一| 欧美乱大交xxxxx另类电影| 国产区精品在线观看| 在线看福利67194| 亚洲国产日韩精品在线| 少妇av一区二区三区| 亚洲综合在线播放| 精品国产一区二区三区久久久狼| 亚洲欧美日韩中文在线制服| 久久影院资源网| 黑人与娇小精品av专区| 欧美激情亚洲自拍| 欧美多人乱p欧美4p久久| www.日本久久久久com.| 国模视频一区二区三区| 欧美一级视频在线观看| 亚洲国产高潮在线观看| 38少妇精品导航| 日韩风俗一区 二区| 欧美成人精品xxx| 啊v视频在线一区二区三区| 日韩免费在线电影| 久久国产精品首页| 久久精品中文字幕| 欧美电影免费观看网站| 亚洲2020天天堂在线观看| 国产精品日韩电影| 精品亚洲一区二区三区四区五区| 国产成+人+综合+亚洲欧洲| 亚洲人成在线观看| 国产欧美久久久久久| 中文字幕精品视频| 久久网福利资源网站| 久久综合久久88| 91精品视频免费观看| 亚洲一区二区中文| 成人午夜黄色影院| 欧美国产一区二区三区| 久久91超碰青草是什么| 97精品国产aⅴ7777| 亚洲福利视频久久| 最近2019年好看中文字幕视频| 亚洲第一色中文字幕| 国产精品久久久久久久久久99| 国产精品中文字幕在线| 国产精品久久久亚洲| 91嫩草在线视频| 欧美性xxxxx极品娇小| 91精品视频在线免费观看| 欧美大片欧美激情性色a∨久久| 亚洲精品女av网站| 日韩电影免费观看在线| 中文字幕亚洲无线码在线一区| 国产一区二区三区在线| 青青草国产精品一区二区| 欧美国产激情18| 国产在线精品成人一区二区三区| 国产精品成人一区二区| 日日摸夜夜添一区| 亚洲高清久久网| 91九色视频在线| 91精品国产高清自在线看超| 色爱av美腿丝袜综合粉嫩av| 亚洲人成在线观看| 久久久久中文字幕| 亚洲第一精品夜夜躁人人躁| 日韩精品极品视频| 伊人久久综合97精品| 亚洲电影免费观看高清完整版| 久久久久久久久91| 国产欧美日韩综合精品| 国产有码一区二区| 国产裸体写真av一区二区| 国产做受高潮69| 亚洲精品videossex少妇| 日韩免费电影在线观看| 日韩在线中文字| 国产成人精品网站| 亚洲变态欧美另类捆绑| 在线日韩av观看| 国产一区二区视频在线观看| 97国产精品视频人人做人人爱| 日韩精品一区二区视频| 中文.日本.精品| 国产精品av在线| 日韩激情片免费| 亲爱的老师9免费观看全集电视剧| 日韩成人激情影院| 亚洲免费一在线| 久久久久久亚洲精品不卡| 91久久中文字幕| 国产精品福利在线观看网址| 亚洲一区制服诱惑| 国内精品在线一区| 成人国内精品久久久久一区| 亚洲视频一区二区三区| 久久777国产线看观看精品| 激情亚洲一区二区三区四区| 亚洲国产天堂久久综合| 欧美成人午夜影院| 久久久久久久激情视频| 亚洲xxx自由成熟| 国产成人aa精品一区在线播放| 青青在线视频一区二区三区| 亚洲国产欧美自拍| 一区二区亚洲欧洲国产日韩| 欧美精品福利视频| 亚洲欧洲视频在线| 午夜精品一区二区三区在线| 最近免费中文字幕视频2019| 欧美精品在线观看| 亚洲精品国产综合区久久久久久久| 九九热99久久久国产盗摄| 国产精品视频一区二区三区四| 国产精品久久视频| 91影视免费在线观看| 91亚洲精品一区二区| 亚洲区在线播放| 国产精品自产拍高潮在线观看| 国产一区二区三区三区在线观看| 亚洲最大的网站| 高清视频欧美一级| 国产乱肥老妇国产一区二| 中文字幕久热精品在线视频| 国产香蕉97碰碰久久人人| 亚洲韩国青草视频| 久久国产精品电影| 国产成人在线视频|