- 1、本文档共6页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
?
?
基于VC++6.0的BMP图像显示
?
?
摘要:探讨了VC++6.0环境下BMP图像文件的显示。首先详细介绍BMP图像文件的两种类型DDB和DIB的各部分组成及其意义,并对DIB的两种形式WindowsDIB和OS/2DIB加以区别,然后利用VC++6.0的MFC库函数对DDB位图的显示加以实现,对DIB位图的显示过程以程序流程图的形式详细说明。
论文关键词:BMP图像,VC++6.0,图像显示,DDB位图,DIB位图
位图分为设备相关位图(DDB)和设备无关位图(DIB)两种。
1DDB位图
DDB是一种内部位图格式,自身没有调色板,它的显示依赖于计算机显示系统内部的调色板,因此它的显示效果因计算机显示系统的不同而不同。
1.1BITMAP结构
BITMAP结构定义了DDB位图的类型、宽度、颜色格式和像素位值信息,该结构的定义如下:
typedefstructtagBITMAP
{
intbmType;//指定位图的类型,这个值必须为0
intbmWidth;//指定位图的宽度,以像素为单位
intbmHeight;//指定位图的高度,以像素为单位
intbmWidthBytes;//指定位图中每个扫描行的字节数
BYTEbmPlanes;//指定颜色层数
BYTEbmBitsPixel;//指定每个像素所占的位数
viodFAR*bmBits;//存放像素值的内存块的地址
}BITMAP,*PBITMAP
1.2DDB位图的显示
显示DDB位图的基本过程为:首先创建一个位图对象,并将该位图对象装入内存;然后创建一个与显示设备上下文相兼容的内存设备上下文(CDC);再将该位图对象选入创建的内存设备上下文,并保存内存设备上下文中原有位图的指针;接着显示位图;最后恢复设备上下文中原有的位图。函数DisplayDDB展示了DDB位图的显示过程。
BOOLDisplayDDB(CDC*pDC,LPCSTRlpszBitmap)
{
CBitmapBitmap,*poldBitmap;
BITMAPbmp;
CDCdcMemory;
if(!Bitmap.LoadBitmap(lpszBitmap))//加载位图
{returnFALSE;}
if(!dcMemory.CreateCompatibleDC(pDC))//创建CDC
returnFALSE;//创建CDC失败
//把创建的位图选入CDC
poldBitmap=(CBitmap*)dcMemory.SelectObject(Bitmap);
//显示位图
pDC-BitBlt(0,0,bmp.bmWidth,bmp.bmHeight,dcMemory,0,0,SRCCOPY);
//把原始位图选入CDC
dcMemory.SelectObject(poldBitmap);
returnTRUE;
}
2DIB位图
DIB位图是设备无关位图,它自带调色板信息,经常存储为以BMP为后缀的图像。DIB分为WindowsDIB和OS/2DIB两种。
2.1WindowsDIB
WindowsDIB由BITMAPFILEHEADER(位图文件头)、BITMAPINFOHEADER(位图信息头)、RGBQUAD(位图颜色表)和位图图像数据四部分组成。
位图文件头BITMAPFILEHEADER的定义如下:
typedefstructtagMAPFILEHEADER
{
WORDbfType;指定文件的类型,必须是BM
DWORDbfSize;指定位图文件的大小,以字节为单位
WORDbfReserved1;保留位,必须为0
WORDbfReserved2;保留位,必须为0
DWORDbfOffBits;从BITMAPFILEHEADER结构到位图数据的偏移量(字节)
}BITMAPFILEHEADER,FAR*LPBITMAPFILEHEADER,*PBITMAPFILEHEADER;
位图信息头BITMAPFILEHEADER结构的定义如下:
typedefstructtagBITMAPINFOHEADER
{
DWORDbiSize;//指定这个结构的大小,以字节为单位
LONGbiWidthbiWidth;//指定位图的宽度,以像素为单位
LONGbiHeight;//指定位图的高度,以像素为单位
WORDbiPlanes;//该值必须为1
WORDbiBitCount;//指定每个像素所占的位数
DWORDbiCompression;//指定位图的压缩类型
DWORDbiSizeImage;//指定位图数据占用的字节数,bi
文档评论(0)