BitM.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
首先,我们了解一下BMP的格式,BMP有四部分组成,用表格表示如下: ? ? ? ? 1. 文件信息头 2. 位图信息头 3. 调色板 4. 位图数据 ? 第一部分,文件信息头的格式如下: typedef struct tagBITMAPFILEHEADER { ??????? WORD??? bfType; ??????? DWORD?? bfSize; ??????? WORD??? bfReserved1; ??????? WORD??? bfReserved2; ??????? DWORD?? bfOffBits; } BITMAPFILEHEADER, FAR *LPBITMAPFILEHEADER, *PBITMAPFILEHEADER; 共有14个字节,其中bfType为文件类型,BMP的类型为0×4d42,也就是字母m和b;bfSize是文件大小,为1,2,3,4部分大小的总和;bfReserved1和bfReserved2为1,2,3部分大小的总和。 ? 第二部分,位图信息头,定义如下: typedef struct tagBITMAPINFOHEADER{ ??????? DWORD????? biSize; ??????? LONG?????? biWidth; ??????? LONG?????? biHeight; ??????? WORD?????? biPlanes; ??????? WORD?????? biBitCount; ??????? DWORD????? biCompression; ??????? DWORD????? biSizeImage; ??????? LONG ??????biXPelsPerMeter; ??????? LONG?????? biYPelsPerMeter; ??????? DWORD????? biClrUsed; ??????? DWORD????? biClrImportant; } BITMAPINFOHEADER, FAR *LPBITMAPINFOHEADER, *PBITMAPINFOHEADER; 总共40个字节,字段比较多,可以查看MSDN中的说明,对于RGB24的位图,这个结构体一般定义如下: BITMAPINFOHEADER bih; ?????? bih.biSize = sizeof(BITMAPINFOHEADER); ?????? bih.biWidth = width; ?????? bih.biHeight = height; ?????? bih.biPlanes = 1; ?????? bih.biBitCount = 24; ?????? bih.biCompression = 0; ?????? bih.biSizeImage = size; ?????? bih.biXPelsPerMeter = 0; ?????? bih.biYPelsPerMeter = 0; ?????? bih.biClrUsed = 0; ?????? bih.biClrImportant = 0; ? 第三部分是调色板信息,定义如下: typedef struct tagRGBQUAD { ??????? BYTE??? rgbBlue; ??????? BYTE??? rgbGreen; ??????? BYTE??? rgbRed; ??????? BYTE??? rgbReserved; } RGBQUAD; 这部分用来表示RGB各色的强度,一般情况我们不把这一部分写到文件中。 ? 第四部分就是真正的数据,比如宽度和高度分别是320和240,这部分数据的长度应该为320*240*3(每个像素点上有3个字节,分别用来表示b,g,r的颜色)。 ? 根据对BMP格式的说明,我们可以轻易的写出一个生成BMP图像的函数,如下所示: ? // pData为rgb24数据,width为位图宽度,height为位图高度,filename为位图文件的名字 void Snapshot( BYTE * pData, int width, int height, const char * filename ) { ?????? int size = width*height*3; // 每个像素点3个字节 ? ?????? // 位图第一部分,文件信息 ?????? BITMAPFILEHEADER bfh; ?????? bfh.bfType = 0×4d42;? //bm ?????? bfh.bfSize = size? // data size ????????????? + sizeof( BITMAPFILEHEADER ) // fi

文档评论(0)

mv2323 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档