在VC++中实现设备无关位图类

在VC++中实现设备无关位图类

ID:38784753

大小:21.96 KB

页数:8页

时间:2019-06-19

在VC++中实现设备无关位图类_第1页
在VC++中实现设备无关位图类_第2页
在VC++中实现设备无关位图类_第3页
在VC++中实现设备无关位图类_第4页
在VC++中实现设备无关位图类_第5页
资源描述:

《在VC++中实现设备无关位图类》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、在VC++中实现设备无关位图类CDib 摘要:本文通过CDib类库的实现,介绍在微软VisualC++6.0版集成开发环境下,备无关位图程序的实现机制和编程要点,并给出关键部分的程序代码。关键词:VisualC++应用程序DIBDDBBMP文件一、问题的提出众所周知,Windows可以进行各种各样的图像处理,这归功于它全面的位图支持能力。早在DOS时代就存在着许多的图像文件格式,较著名的如PCX、GIF、JPEG、TGA等,在Windows中,Microsoft又制定了一个BMP格式。Window

2、s把位图(bitmap)分成两大类:“设备相关位图”(DeviceDependentBitmap,简称DDB)与“设备独立位图”(DeviceIndependentBitmap,简称DIB)。严格的说,DIB是一种“格式”,它可以存放在内存中,也可以存储成文件,即常见的BMP文件,不过有时候它的扩展名可能是DIB。大体而言,DIB格式由三部分组成,即:图片信息、调色板信息、像素阵列。“图片信息”中记录着图像文件的大小、色彩数(可分为单色、16色、256色和真彩四种),以及仅有参考价值的“分辨率”等

3、信息。“调色板信息”指的是这张图像所需参考的调色板,虽然“调色板信息”很重要,但是“真彩”的DIB图像却没有调色板。“像素阵列”则是实际存放图像的部分,它是一个很大的数组,对应于屏幕上的像素。VC++的MFC中,以CBitmap类代表DDB图像,极大的方便了编程人员对DDB的使用。然而通常情况下,没有人会把DDB图像存储成文件,因此我们使用更多的是DIB,遗憾的是MFC不象Borland的OWL,有TDib类可以用来处理DIB文件,它对于DIB的支持几乎可以说是没有,因此有必要设计可以重复使用的类

4、CDib,专门用来处理DIB。二、CDib的具体实现在一个涉及DIB操作的应用程序中,常用到的数据结构有BITMAPFILEHEADER、BITMAPINFO、BITMAPINFOHEAD、RGBQUAD。简单的说就是:BMP文件=BITMAPFILEHEADER+BITMAPINFO+位图数据=BITMAPFILEHEADER+BITMAPINFOHEAD+RGBQUAD+位图数据而存在内存中的DIB对象为:DIB对象=BITMAPINFO+位图数据=BITMAPINFOHEAD+RGBQUAD

5、+位图数据1.Dib类的头文件定义在所实现的CDib类中,将完成与DIB操作有关的大部分功能,例如把DDB转换成DIB、从BMP文件建立DIB、建立空白DIB、拷贝调色板、读取BMP文件、存储BMP文件、绘制图像等等。在自定义的类的头文件中所需加入的函数与变量具体如下:classCDib:publicCObject{public:CDib(CBitmap&ddb,CPalette*palette);CDib(char*bmpfile);CDib(CFile&file);CDib(intWidth,

6、intHeight,intBitsPerPixel);~CDib();//取得DIB相关信息//返回像素阵列void*GetBits();//返回每像素的位数intGetBitsPerPixel();//返回图像尺寸BOOLGetDimension(CSize&size);DWORDWidth();DWORDHeight();//调色板大小intGetPaletteCount();//每条扫描线所需的字节数DWORDBytesPerLine();//取得调色板CPalette*GetPalette

7、();//绘图函数//在DC上缩放输出intStretchToDC(CDC&dc,CRect&src,CRect&dst,DWORDrop=SRCCOPY);//在DC上等尺寸输出intSetToDC(CDC&dc,CRect&src,CPoint&dst);//输出到DDBBOOLCopyToDDB(CBitmap&ddb);//文件相关//存文件BOOLDoSaveFile(char*bmpfile);//写入指定文件BOOLDoWriteFile(CFile&file);//读入指定文件BO

8、OLDoReadFile(CFile&file);Protected://计算像素阵列的大小longGetImageBodySize();//计算BITMAPINFOHEADER和RGBQUAD数组的大小intGetBITMAPINFOSize();//初始化文件头的信息voidInitDibInfo(intBitsPerPixel,intw=0,inth=0);//复制调色板voidCopyPalette(CPalette&palette);//文件头BITMAPINFO*Dib

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。