




已阅读5页,还剩30页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第三章VC+图像编程基础,一、与设备无关位图(DIB),与设备无关位图(DIB)可以在不同的机器或系统中显示位图所固有的颜色。与DDB相比,DIB是一种外部的位图格式,经常存储以BMP为后缀的位图文件。1.BMP文件组成BMP文件由文件头、位图信息头、颜色信息表和图像数据四部分组成。,位图结构如下:,2.BMP文件头P30,BMP文件头数据结构含有BMP文件的类型、文件大小和位图起始位置等信息。其结构定义如下:typedefstructtagBITMAPFILEHEADERWORDbfType;/文件类型,必须为BMP,即0 x4d42DWORDbfSize;/文件大小,包括这14个字节WORDbfReserved1;/保留字,必须为0WORDbfFeserved2;/保留字,必须为0DWORDbfOffBIts;/从文件头到实际位图数据的偏移量字节数BITMAPFILEHEADER;,Bf:是BITMAPFILEHEADER的缩写,这个结构的长度是固定的,为14个字节(WORD为无符号16位整数,DWORD为无符号32位整数)。说明:为什么文件类型为BMP,即0 x4d42?原因:(4d)16=(77)10,即字母m的ASCII码,(42)16=(66)10,即字母b的ASCII码,3.位图信息头,位图信息头数据用于说明位图的尺寸等信息typedefstructtagBITMAPINFOHEADERDWORDbiSize;/本结构所占用字节数,为40LONGbiWidth;/位图的宽度,以像素为单位LONGbiHeight;/位图的高度,以像素为单位。WORGbiPlanes;/目标设备的级别,必须为1WORDbiBitCount;/表示颜色时所需的位数,常用的有1(二值图),4(16色),8(256色)或24(真彩色)。DWORDbiCompression;/位图压缩类型,必须是0(不压缩,基本采用该形式),1(BI_RLE8压缩类型)或2(BI_RLE4压缩类型)之一。DWORDbiSizeImage;/实际位图数据占用的字节数。BITMAPINFOHEADER;,Bi:是BITMAPINFOHEADER的缩写,4.颜色表(调色板),用于说明位图中的颜色,他有若干个表项,每个表项是一个RGBQUAD类型的结构,定义一种颜色。其定义如下:typedefstructtagRGBQUADBYTErgbBlue;/蓝色的亮度(范围是0255)BYTErgbGreen;/绿色的亮度(范围是0255)BYTErgbRed;/红色的亮度(范围是0255)BYTErgbReserved;/保留值RGBQUAD;,位图信息头和颜色表组成位图信息BITMAPINFO,定义如下:typedefstructtagBITMAPINFOBITMAPINFOHEADERbmiHeader;/位图信息头RGBQUADbmiColors1;/颜色表BITMAPINFO;,5.Windows位图结构数据域的含义P30,二、CDib类库的建立P40,MFC中没有处理DIB位图的类,所以需要定义一个处理DIB位图的专用类CDib类,在其中封装必要的DIB数据成员和处理函数。voidLoadFile(constchar*dibFileName);/装载BMP位图文件BOOLSaveFile(constchar*pszFilename);/存储BMP位图文件,1.CDib类的设计目标,1)功能主要包括:DIB文件的读、写操作提供位图的宽度、高度、颜色数目等位图相关信息提供有关位图占据内存空间的信息,包括图像数据区首地址、颜色表首地址、位图信息结构首地址等信息。,2)父类MFC中的Cobject类是MFC中其他大多数类的根类和基类。他提供了许多有用的特性。另外,Cobject类具有最低限度的成员数据和函数,从Cobject类派生类所花的代价是最低的。因此,采用Cobject类作为CDib类的父类。,3)数据封装他是面向对象的重要特征。但是在设计像CDib这样的类时,因为操作DIB的Win32API函数大多需要一些DIB的属性作为参数,因此在设计CDib时应该注意程序的效率,不要过分封装。,4)继承在设计CDib类时,在程序中即要打开原图,又要对原图进行各种处理,为了能够对照处理结果,即要显示原图,又要显示处理结果图,因此对原图不做任何处理;将原图定义为CDib类的对象,而将需要处理图像的类定义为CDib类的派生类,由于派生类对基类中的保护或公有成员可以直接使用因此,因此在派生类中仅仅需要定义各种处理图像数据区的函数。,2.构造CDib类,创建CDib类,其接口文件和实现文件分别为DIB.H和DIB.CPP.文件DIB.H包含了CDib类的类声明有关的所有信息。如下:#ifndef_CDIB_H#define_CDIB_H,classCDib:publicCObjectpublic:RGBQUAD*m_pRGB;/BYTE*m_pData;/UINTm_numberOfColors;/颜色个数BOOLm_valid;BITMAPFILEHEADERbitmapFileHeader;/文件头BITMAPINFOHEADER*m_pBitmapInfoHeader;/信息头BITMAPINFO*m_pBitmapInfo;/位图信息指针BYTE*pDib;DWORDsize;/文件大小,调色板指针,图像数据,public:CDib();/无参构造函数CDib();/析构函数charm_fileName256;char*GetFileName();/返回位图文件名BOOLIsValid();DWORDGetSize();/位图文件的大小UINTGetWidth();/位图的宽度UINTGetHeight();/位图的高度UINTGetNumberOfColors();/颜色数目RGBQUAD*GetRGB();/颜色表首地址BYTE*GetData();/图像数据首地址BITMAPINFO*GetInfo();/图像信息结构首地址,WORDPaletteSize(LPBYTElpDIB);WORDDIBNumColors(LPBYTElpDIB);voidSaveFile(constCStringfilename);/存储BMP位图文件public:voidLoadFile(constchar*dibFileName);/装载BMP位图文件;#endif,文件DIB.CPP包含了CDib类中各函数的实现,代码如下:#includestdafx.h#includecdib.h#includewindowsx.h#includemath.hCDib:CDib()/定义构造函数CDib:CDib()/定义析构函数GlobalFreePtr(m_pBitmapInfo);/删除该对象中的图像,BOOLCDib:IsValid()returnm_valid;char*CDib:GetFileName()returnm_fileName;/文件名UINTCDib:GetWidth()return(UINT)m_pBitmapInfoHeader-biWidth;/UINTCDib:GetHeight()return(UINT)m_pBitmapInfoHeader-biHeight;/,图像宽度,还记得这是什么含义?,这个呢?,图像高度,/位图文件的大小DWORDCDib:GetSize()if(m_pBitmapInfoHeader-biSizeImage!=0)returnm_pBitmapInfoHeader-biSizeImage;elseDWORDheight=(DWORD)GetHeight();DWORDwidth=(DWORD)GetWidth();returnheight*width;/计算图像大小,还记得这是什么含义?,图像大小,/计算颜色数UINTCDib:GetNumberOfColors()intnumberOfColors;/为实际用到的颜色数if(m_pBitmapInfoHeader-biClrUsed=0),颜色位数,实际使用的颜色数,BYTE*CDib:GetData()returnm_pData;/图像数据RGBQUAD*CDib:GetRGB()returnm_pRGB;BITMAPINFO*CDib:GetInfo()returnm_pBitmapInfo;WORDCDib:PaletteSize(LPBYTElpDIB)return(DIBNumColors(lpDIB)*sizeof(RGBTRIPLE);,voidCDib:LoadFile(constchar*dibFileName)strcpy(m_fileName,dibFileName);CFiledibFile(m_fileName,CFile:modeRead);/以读的方式打开文件。dibFile.Read(void*)/读取文件失败,这个函数非常重要,通过Cfile类对象的操作来读取位图,为相应的类成员变量赋指针,voidCDib:SaveFile(constCStringfilename)strcpy(m_fileName,filename);CFiledibFile(m_fileName,CFile:modeCreate|CFile:modeWrite);dibFile.Write(void*),只能保存宽度、高度没有改变的图像,3.流程,位图的读取方法,其流程如下,三、调色板及图像的显示,1.调色板原理为了保证Windows基本显示界面的一致性,Windows保留了一个有20种颜色的内部系统调色板,用来描绘窗口的图标、边界、按钮等通用界面。而在显示图像时,要使用内部系统之外的颜色,此时要创建一个逻辑调色板。并且将其实现到系统调色板中,才能显示新的颜色。,2.调色板的创建与实现,在使用VC+进行Windows的应用程序设计时,MFC基本类库提供了CDC类和Cpalette类,封装了有关调色板的操作,该类的成员函数CreatePalette负责创建逻辑调色板。具体步骤如下:建立一个LOGPALETTE结构和PSLETTEENTRY数组;对数组元素进行初始化并对成员变量进行设置;建立Cpalette对象并使用CreatePalette函数初始化调色板对象;使用SelectPalette函数来将设备描述表和调色板联系起来;使用CDC中的RealizePalette函数使得调色板生效。,3.创建调色板程序代码,在视类定义一个指向调色板的指针。Cpalette_*hPalette;为要显示的位图创建调色板,要显示的位图可以是CDib类或其派生类的对象或指针。,CPalette*CDynSplitView2:CreateBitmapPalette(CDib*pBitmap)structWORDVersion;/调色板的版本号,指定为0 x300WORDNumberOfEntries;/调色板中的表项数PALETTEENTRYaEntries256;palette=0 x300,256;LPRGBQUADpRGBTable=pBitmap-GetRGB();/调取颜色表UINTnumberOfColors=pBitmap-GetNumberOfColors();/调色板中的颜色数for(UINTx=0;xBitBlt(0,0,bm.bmWidth,bm.bmHeight,第1和2个参数为(0,0),表示显示在窗口的左上角SRCCOPY,表示直接将源矩形拷贝到目标矩形。,StretchDIBits函数该函数的结构如下:intStretchDIBits(HDChdc,intXDest,intYDest,intnDestWidth,intnDestHeight,intXSrc,intYsrc,intnSrcWidth,intnSrcHeight,CONSTVOID*lpBits,CONSTBITMAPINFO*lpBitsInfo,UINTiUsage,DWORDdwRop);参数hdc:指向目标设备环境的句柄。XDest:指定目标矩形左上角位置的X轴坐标,按逻辑单位来表示坐标。YDest:指定目标矩形左上角的Y轴坐标,按逻辑单位表示坐标。nDestWidth:指定目标矩形的宽度。nDestHeight:指定目标矩形的高度。XSrc:指定DIB中源矩形(左上角)的X轴坐标,坐标以像素点表示。YSrc:指定DIB中源矩形(左上角)的Y轴坐标,坐标以像素点表示。nSrcWidth:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 生态保护游戏机制创新-洞察及研究
- 价格策略优化研究-第1篇-洞察及研究
- 隐私保护部署-洞察阐释
- 高温高压下光气催化反应的多相催化剂适用性研究-洞察阐释
- 现代金融理论创新-洞察阐释
- 跨模态条件式生成模型的并行化训练与优化-洞察阐释
- 面向未来的组织架构-洞察阐释
- 知识图谱视角下碳绩效研究的热点与发展趋势探讨
- 远程护理技术在慢性病管理中的应用-洞察阐释
- 聚酯瓶生产过程中的绿色技术应用-洞察阐释
- 2025年济南综保控股集团有限公司公开招聘(22名)笔试备考试题参考答案详解
- 机加工工艺培训
- 2025年内蒙古自治区中考数学真题试卷(含答案)
- CT增强扫描造影剂外渗的预防与处理
- 深静脉置管的维护与护理
- Unit 2 Home Sweet Home 第6课时(Project Reading Plus) 2025-2026学年人教版英语八年级下册
- 孤独症业务管理制度
- xx公司奖金管理制度
- 劳务服务购买协议书范本
- 2025-2030年中国生物医学材料行业市场深度分析及发展前景与投资研究报告
- 2025年小学语文一年级下册无纸笔测试题(小学一年级游园乐考无纸化检测)
评论
0/150
提交评论