- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
详说如何用 C ,C ++语言和JAVA 读入位图和保存位图
作者:彭千贺
邮件:pengqianhe@
博客:
声明:本篇文章由彭千贺原创,禁止任何形式的修改,如有发现,即追究其相关的法律责
任。但是,任何人均可以自由传播本文章的副本。如需要修改,请邮件联系我。
我这里要说的主要是如何读入 8 位或 24 位位图。因为这两种格式的位图更加具有代表性。如
32 位位图也只是多了一个透明度的分量罢了。其跟 24 位位图的格式相比变化不大。
我们常说进行数字图像处理,其实主要是处理位图的像素数据和采用何种算法去处理像素
数据。可是,要想处理像素数据,首先就是要读入位图的数据。不然,处理从何谈起。
下面我将详细的说明 BMP 位图的文件结构,相信看完之后,对于读入位图就不是什么难事
了。当然,我这里的前提是你熟悉如何读入文件。好了,废话不多说了。我们开始吧。
BMP 位图的第一部分就是文件头。下面是它的结构:
typedef struct tagBITMAPFILEHEADER {
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
} BITMAPFILEHEADER, *PBITMAPFILEHEADER;
上面的这个文件头的结构体是摘自 MSDN 。它的各项的含义如下:bfType 代表的是文件格式 ,
就是“BM”,用十六进制的数表示是0x4d42,用十进制的数表示就是19778 。所以,从BMP
文件的前两个字节我们就可以判断我们要打开的图片是不是位图,如果不是的话,我们就
可以不用读了。bfSize 代表的是该位图文件的大小(包含文件头、信息头、调色板(如果
有)、像素数据)。它是一个 DWORD 类型,占 4 个字节。bfReserved1 和 bfReserved2 都是保
留量,因此它们应该都为 0 。它们合起来占4 个字节。bfOffBits 代表的是像素数据距离文件
头的位置,也就是偏移地址 。如果我们想直接读像素数据的话,可以把文件指针偏移
bfOffBits 个字节,然后读取就可以了,知道读到文件结尾 。这样算起来,文件头一共占了
2+4+2+2+4=14字节。所以,这个文件头的大小固定是 14字节的。而且,还有重要的一 是,
其 实 在 保 存 BMP 文 件 的 时 候 , 保 存 的 顺 序 也 是 按 照
bfType 、bfSize 、bfReserved1 、bfReserved2 、bfOffBits 的顺序的。因此,如果我们不想用微
软的这个结构体的话,你可以按照上面的顺序依次的读入各项,用不用这个结构体,关系
不是很大。不过只是说,用结构体的话,可能会带来一些方便罢了。这一 ,在当你用C 或
Java 来读取的时候,会感觉更深刻。因为在C 或 Java 中没有微软提供的这个结构体,要么
自己构造这个结构体,要么你就按找顺序和字节数依次读出各项的值 。后面有我的C 和
Java 读入位图的例子,你可以参看下。
BMP 位图的第二部分就是信息头。下面是它的结构:
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, *PBITMAPINFOHEADER;
当然了,这个结构体还是来自MSDN 的。biSize 代表的是该结构体的大小,即 40 字节 。
biWidth 代表的是位图的宽度,以像素为单位。biHeight 代表的是位图的高度,以像素为单
位。biPlanes 代表的位图的平面数,平面数不同,RGB 各分量所排列的顺序
文档评论(0)