欢迎来到论文网! 识人者智,自知者明,通过生日认识自己! 生日公历:
网站地图 | Tags标签 | RSS
论文网 论文网8200余万篇毕业论文、各种论文格式和论文范文以及9千多种期刊杂志的论文征稿及论文投稿信息,是论文写作、论文投稿和论文发表的论文参考网站,也是科研人员论文检测和发表论文的理想平台。lunwenf@yeah.net。
您当前的位置:首页 > 科技论文 > 计算机论文

基于VC++6.0的BMP图像显示

时间:2015-09-02  作者:张河新 杨璐珍

摘要:探讨了VC++6.0环境下BMP图像文件的显示。首先详细介绍BMP图像文件的两种类型DDB和DIB的各部分组成及其意义,并对DIB的两种形式Windows DIB和OS/2 DIB加以区别,然后利用VC++6.0的MFC库函数对DDB位图的显示加以实现,对DIB位图的显示过程以程序流程图的形式详细说明。
论文关键词:BMP图像,VC++6.0,图像显示,DDB位图,DIB位图

位图分为设备相关位图(DDB)和设备无关位图(DIB)两种。

1 DDB位图

DDB是一种内部位图格式,自身没有调色板,它的显示依赖于计算机显示系统内部的调色板,因此它的显示效果因计算机显示系统的不同而不同。

1.1 BITMAP结构

BITMAP结构定义了DDB位图的类型、宽度、颜色格式和像素位值信息,该结构的定义如下:

typedef struct tagBITMAP

{

int bmType; //指定位图的类型,这个值必须为0

int bmWidth; //指定位图的宽度,以像素为单位

int bmHeight; //指定位图的高度,以像素为单位

int bmWidthBytes; //指定位图中每个扫描行的字节数

BYTE bmPlanes; //指定颜色层数

BYTE bmBitsPixel; //指定每个像素所占的位数

viod FAR* bmBits; //存放像素值的内存块的地址

} BITMAP,*PBITMAP

1.2 DDB位图的显示

显示DDB位图的基本过程为:首先创建一个位图对象,并将该位图对象装入内存;然后创建一个与显示设备上下文相兼容的内存设备上下文(CDC);再将该位图对象选入创建的内存设备上下文,并保存内存设备上下文中原有位图的指针;接着显示位图;最后恢复设备上下文中原有的位图。函数DisplayDDB展示了DDB位图的显示过程。

BOOL DisplayDDB(CDC* pDC,LPCSTR lpszBitmap)

{

CBitmap Bitmap,*poldBitmap;

BITMAP bmp;

CDC dcMemory;

if(!Bitmap.LoadBitmap(lpszBitmap)) //加载位图

{ return FALSE;}

if(!dcMemory.CreateCompatibleDC(pDC)) //创建CDC

return FALSE;//创建CDC失败

//把创建的位图选入CDC

poldBitmap=(CBitmap*)dcMemory.SelectObject(&Bitmap);

//显示位图

pDC->BitBlt(0,0,bmp.bmWidth,bmp.bmHeight,&dcMemory,0,0,SRCCOPY);

//把原始位图选入CDC

dcMemory.SelectObject(poldBitmap);

return TRUE;

}

2 DIB位图

DIB位图是设备无关位图,它自带调色板信息,经常存储为以BMP为后缀的图像。DIB分为Windows DIB和OS/2 DIB两种。

2.1 Windows DIB

Windows DIB由BITMAPFILEHEADER(位图文件头)、BITMAPINFOHEADER(位图信息头)、RGBQUAD(位图颜色表)和位图图像数据四部分组成。

位图文件头BITMAPFILEHEADER的定义如下:

typedef struct tagMAPFILEHEADER

{

WORD bfType; 指定文件的类型,必须是BM

DWORD bfSize; 指定位图文件的大小,以字节为单位

WORD bfReserved1; 保留位,必须为0

WORD bfReserved2; 保留位,必须为0

DWORD bfOffBits; 从BITMAPFILEHEADER结构到位图数据的偏移量(字节)

} BITMAPFILEHEADER,FAR *LPBITMAPFILEHEADER,*PBITMAPFILEHEADER;

位图信息头BITMAPFILEHEADER结构的定义如下:

typedef struct tagBITMAPINFOHEADER

{

DWORD biSize; //指定这个结构的大小,以字节为单位

LONG biWidthbiWidth; //指定位图的宽度,以像素为单位

LONG biHeight; //指定位图的高度,以像素为单位

WORD biPlanes; //该值必须为1

WORD biBitCount; //指定每个像素所占的位数

DWORD biCompression; //指定位图的压缩类型

DWORD biSizeImage; //指定位图数据占用的字节数,biSizeImage=biWidth’×biHeight,其中biWidth’必须是4的整数倍,biWidth’的计算方法为:((biWidth)+31)/32*4

LONG biXPelsPerMeter; //指定位图目标设备的水平分辨率(像素/米)

LONG biYPelsPerMeter; //指定位图目标设备的垂直分辨率(像素/米)

DWORD biClrUsed; //指定显示位图所用到的颜色数目,如果这个值为0,需要所有的颜色。

DWORD biClrImportant; //指定显示位图所用到的颜色数目,如果这个值为0,需要所有的颜色。

} BITMAPINFOHEADER, *PBITMAPINFOHEADER;

有的位图显示需要调色板,有的不需要。不需要调色板的位图的BITMAPINFOHEADER后直接是位图的数据。调色板是一个由biClrUsed个元素组成的数组(如果biClrUsed=0,则有2的biBitCount次幂个元素)。数组中每个元素都是一个RGBQUAD结构,RGBQUAD结构的定义如下:

typedef struct tagRGBQUAD

{

BYTE rgbBlue; //指定该颜色的蓝色分量

BYTE rgbGreen; //指定该颜色的绿色分量

BYTE rgbRed; //指定该颜色的红色分量

BYTE rgbReserved; //保留值,必须为0

} RGBQUAD;

位图信息头和调色板组成了位图信息(BITMAPINFO)结构,BITMAPINFO结构的定义如下:

typedef struct tagBITMAPINFO

{

BITMAPINFOHEADER bmiHeader;

RGBQUAD bmiColors[1];

 

查看相关论文专题
加入收藏  打印本文
上一篇论文:基于Silverlight的下一代可视化商业智能系统研究
下一篇论文:基于Visual FoxPro 8.0的普通高中会考数据管理
科技论文分类
科技小论文 数学建模论文
数学论文 节能减排论文
数学小论文 低碳生活论文
物理论文 建筑工程论文
网站设计论文 农业论文
图书情报 环境保护论文
计算机论文 化学论文
机电一体化论文 生物论文
网络安全论文 机械论文
水利论文 地质论文
交通论文
相关计算机论文
    无相关信息
最新计算机论文
读者推荐的计算机论文