用C语言解析BMP文件的结构
来源:优易学  2010-1-14 10:36:50   【优易学:中国教育考试门户网】   资料下载   IT书店

  bmp文件的结构比较简单,主要包括文件头,BMP信息头,BMP数据内容。文件头BITMAPFILEHEADER结构为:
  Windows GDI提供了
  typedef struct tagBITMAPFILEHEADER {
  WORD bfType;
  DWORD bfSize;
  WORD bfReserved1;
  WORD bfReserved2;
  DWORD bfOffBits;
  } BITMAPFILEHEADER, *PBITMAPFILEHEADER;
  BMP信息头BITMAPINFO结构为:
  typedef struct tagBITMAPINFO {
  BITMAPINFOHEADER bmiHeader;
  RGBQUAD bmiColors[1];
  } BITMAPINFO, FAR *LPBITMAPINFO, *PBITMAPINFO;
  typedef struct tagBITMAPCOREINFO {
  BITMAPCOREHEADER bmciHeader;
  RGBTRIPLE bmciColors[1];
  } BITMAPCOREINFO, FAR *LPBITMAPCOREINFO, *PBITMAPCOREINFO;
  #include <pshpack2.h>
  typedef struct tagBITMAPFILEHEADER {
  WORD bfType;
  DWORD bfSize;
  WORD bfReserved1;
  WORD bfReserved2;
  DWORD bfOffBits;
  } BITMAPFILEHEADER, FAR *LPBITMAPFILEHEADER, *PBITMAPFILEHEADER;来源:考
  有一次,一个朋友给了一套BMP文字的图片,想把BMP转化为字库,需要去掉BMP的头和BMP信息,只取数据部分,并存为数组,就根据BMP结构,写了如下一个小程序,主要包括文件读写,文件查找等:
  #include <stdio.h>
  #include <stdlib.h>
  #include <assert.h>
  #include <windows.h>
  BITMAPFILEHEADER file_head;
  BITMAPINFO fileinfo;
  //把彩色的图转为黑白色,输入源文件名字和转出的文件名字
  #define FONT_WIDTH_1 (28)
  #define FONT_WIDTH_2 (22)  
  char * getfilename(char * filename)
  {
  char strResult[128]={0}; //保存结果
  char *temp, *ret;
  temp = filename;
  int nStrLen = strlen(filename); //原始字符串长度
  for(int i = nStrLen; i > 0; i--) //倒查,每个字符和反斜杠对比
  {
  if (filename[i] == '\\') //如果当前字符是反斜杠
  {
  //复制倒数第一个斜杠后的数据,并去掉.bmp
  strncpy(strResult, (char *)(temp+i+1), nStrLen-i-1-4);
  break;
  }
  else
  {
  //复制字符串,去掉.bmp
  if (i = 1)
  {
  strncpy(strResult, (char *)temp, nStrLen-4);
  break;
  }
  }
  }
  ret = strResult;
  return (ret);
  }
  #if 1
  char * getfilepath(char * filename)
  {
  char strResult[128] = {0}; //保存结果
  char *temp, *ret;
  temp = filename;
  int nStrLen = strlen(filename); //原始字符串长度
  for(int i = nStrLen; i > 0; i--) //倒查,每个字符和斜杠对比
  {
  if (filename[i] == '\\') //如果当前字符是斜杠
  {
  //复制路径,包括斜杠
  strncpy(strResult, (char *)temp, i+1);
  break;
  }
  }
  ret = strResult;
  return (ret);
  }
  #endif

[1] [2] [3] [4] 下一页

责任编辑:cyth

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训