欢迎来到天天文库
浏览记录
ID:49822816
大小:72.32 KB
页数:3页
时间:2020-03-04
《MFC开发位图BitMap图像的读取与存储.pdf》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、MFC开发位图BitMap图像的读取与存储做图像处理时的源文件一般要用无损的图像文件格式,位图(BitMap)是windows系统下可存储无压缩图像的文件格式。要实现位图文件的读取和存储,首先要明白位图文件的的存储数据结构。位图文件由四部分依序组成:BITMAPFILEHEADER,BITMAPINFOHEADER,调色板,ImageData。1)BITMAPFILEHEADER结构的长度是固定的14个字节,描述文件的有关信息。其数据结构是:[cpp]viewplaincopy01.typedefstructtagBITMAPFILEHEADER{02.WOR
2、DbfType;//mustbe0x4D42.03.DWORDbfSize;//thesizeofthewholebitmapfile.04.WORDbfReserved1;05.WORDbfReserved2;06.DWORDbfOffBits;//thesumbitsofBITMAPFILEHEADER,BITMAPINFOHEADERandRGBQUAD;theindexbyteoftheimagedata.07.}BITMAPFILEHEADER,FAR*LPBITMAPFILEHEADER,*PBITMAPFILEHEADER;2)BITMAPINF
3、OHEADER结构的长度是固定的40个字节,描述图像的有关信息。其数据结构是:[cpp]viewplaincopy01.typedefstructtagBITMAPINFOHEADER{02.DWORDbiSize;//thesizeofthisstruct.itis40bytes.03.LONGbiWidth;//thewidthofimagedata.theunitispixel.04.LONGbiHeight;//theheightofimagedata.theunitispixel.05.WORDbiPlanes;//mustbe1.06.WORDbi
4、BitCount;//thebitcountofeachpixel.usuallybe1,4,8,or24.07.DWORDbiCompression;//isthisimagecompressed.0indicatesnocompression.08.DWORDbiSizeImage;//thesizeofimagedata.09.LONGbiXPelsPerMeter;10.LONGbiYPelsPerMeter;11.DWORDbiClrUsed;12.DWORDbiClrImportant;13.}BITMAPINFOHEADER,FAR*LPBITM
5、APINFOHEADER,*PBITMAPINFOHEADER;值得注意的是,其中biSizeImage指的是实际图像数据的大小,以字节为单位。其计算公式是:宽*高。其中宽必须是4的整数倍。如果不是整数倍,则取大于宽的离4的整数倍最近的数值。这个要求可能是因为现在的计算机大都是32位4字节的,计算机每次读取4字节,这样每行的像素可以整数次读取完成。3)调色板:现在的计算机大都是32位或是更高,于是图像数据可用真彩色24位表达的,即每个像素均由24bit表示,每8bit表示RGB三色中的一色。但以前的计算机处理能力较差,图像用1位、4位或8位,即BITMAPIN
6、FOHEADER中的biBitCount不是24,这时又想表达出RGB色彩就需要调色板,调色板即使将图像数据中使用的一种颜色对应到RGB颜色中,这样图像数据中的像素值就是一个索引值,真正的像素值是这个索引值对应的调色板中的值。调色板是一个数组,数组中每个元素就是一个rgb颜色,对于8位图像,最多可表达256种颜色,调色板的大小就是256。调色板数组中每个元素的数据结构:[cpp]viewplaincopy01.typedefstructtagRGBQUAD{02.BYTErgbBlue;03.BYTErgbGreen;04.BYTErgbRed;05.BYTE
7、rgbReserved;06.}RGBQUAD;07.typedefRGBQUADFAR*LPRGBQUAD;4)图像数据对于1位图像,1个像素用1bit存储,对于24位图像,1个像素用24bit存储。位图文件的数据是从下而上,从左而右存储的。所以说,读取的时候,最先读到的是图像左下方的像素,最后读取的是图像右上方的图像。用c++写的位图文件的读取与存储方法:类结构(BitMap.h):[cpp]viewplaincopy01.#include02.classBitMap03.{04.public:05.BitMap();06.~BitMap();07.pro
8、tected:08.BITMAPFIL
此文档下载收益归作者所有