多媒体课程设计报告.doc

上传人:小小飞 文档编号:3265215 上传时间:2019-08-07 格式:DOC 页数:35 大小:1.40MB
返回 下载 相关 举报
多媒体课程设计报告.doc_第1页
第1页 / 共35页
多媒体课程设计报告.doc_第2页
第2页 / 共35页
多媒体课程设计报告.doc_第3页
第3页 / 共35页
多媒体课程设计报告.doc_第4页
第4页 / 共35页
多媒体课程设计报告.doc_第5页
第5页 / 共35页
点击查看更多>>
资源描述

《多媒体课程设计报告.doc》由会员分享,可在线阅读,更多相关《多媒体课程设计报告.doc(35页珍藏版)》请在三一文库上搜索。

1、华东交通大学课程设计目录第1章 前言11.1图像处理简介11.2 BMP图片存储格式2第2章 系统分析52.1课设题目与实现功能52.2 系统环境5第3章 系统设计62.1几何平移62.2 256色灰度化72.3二值化82.4亮度变化82.5添加噪声92.6滤波102.7膨胀与腐蚀10第4章 调试结果12第5章 小结1第6章 参考文献2第7章 部分源代码3第1章 前言1.1图像处理简介图像处理(image processing)是用计算机对图像进行分析,以达到所需结果的技术。又称影像处理,图像处理一般指数字图像处理。数字图像是指用数字摄像机、扫描仪等设备经过采样和数字化得到的一个大的二维数组,

2、该数组的元素称为像素,其值为一整数,称为灰度值。图像处理技术的主要内容包括图像压缩,增强和复原,匹配、描述和识别3个部分。虽然某些处理也可以用光学方法或模拟技术实现,但它们远不及数字图像处理那样灵活和方便,因而数字图像处理成为图像处理的主要方面。常见的处理有图像数字化、图像编码、图像增强、图像复原、图像分割和图像分析等。图像数字化,通过取样和量化过程将一个以自然形式存在的图像变换为适合计算机处理的数字形式。图像在计算机内部被表示为一个数字矩阵,矩阵中每一元素称为像素。图像数字化需要专门的设备,常见的有各种电子的和光学的扫描设备,还有机电扫描设备和手工操作的数字化仪。图像编码,对图像信息编码,以

3、满足传输和存储的要求。编码能压缩图像的信息量,但图像质量几乎不变。为此,可以采用模拟处理技术,再通过模-数转换得到编码,不过多数是采用数字编码技术。编码方法有对图像逐点进行加工的方法,也有对图像施加某种变换或基于区域、特征进行编码的方法。脉码调制、微分脉码调制、预测码和各种变换都是常用的编码技术。图像压缩,由数字化得到的一幅图像的数据量十分巨大,一幅典型的数字图像通常由500500或10001000个像素组成。如果是动态图像,是其数据量更大。因此图像压缩对于图像的存储和传输都十分必要。有两类压缩算法,即不失真的方法和近似的方法。最常用的不失真压缩取空间或时间上相邻像素值的差,再进行编码。游程码

4、就是这类压缩码的例子。近似压缩算法大都采用图像交换的途径,例如对图像进行快速傅里叶变换或离散的余弦变换。著名的、已作为图像压缩国际标准的JPEG和MPEG均属于近似压缩算法。前者用于静态图像,后者用于动态图像。它们已由芯片实现。图像增强和复原,图像增强的目标是改进图片的质量,例如增加对比度,去掉模糊和噪声,修正几何畸变等;图像复原是在假定已知模糊或噪声的模型时,试图估计原图像的一种技术。图像增强按所用方法可分成频率域法和空间域法。前者把图像看成一种二维信号,对其进行基于二维傅里叶变换的信号增强。采用低通滤波(即只让低频信号通过)法,可去掉图中的噪声;采用高通滤波法,则可增强边缘等高频信号,使模

5、糊的图片变得清晰。具有代表性的空间域算法有局部求平均值法和中值滤波(取局部邻域中的中间像素值)法等,它们可用于去除或减弱噪声。早期的数字图像复原亦来自频率域的概念。现代采取的是一种代数的方法,即通过解一个大的方程组来复原理想的图片。以提高图像质量为目的的图像增强和复原对于一些难以得到的图片或者在拍摄条件十分恶劣情况下得到的图片都有广泛的应用。例如从太空中拍摄到的地球或其他星球的照片,用电子显微镜或X光拍摄的生物医疗图片等。1.2 BMP图片存储格式BMP是一种与硬件设备无关的图像文件格式,使用非常广。它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BMP文件所占用的空间很

6、大。BMP文件的图像深度可选lbit、4bit、8bit及24bit。BMP文件存储数据时,图像的扫描方式是按从左到右、从下到上的顺序。由于BMP文件格式是Windows环境中交换与图有关的数据的一种标准,因此在Windows环境中运行的图形图像软件都支持BMP图像格式。1、BMP文件组成BMP文件由文件头、位图信息头、颜色信息和图形数据四部分组成。2、BMP文件头BMP文件头数据结构含有BMP文件的类型、文件大小和位图起始位置等信息。其结构定义如下:typedef struct tagBITMAPFILEHEADERWORDbfType; / 位图文件的类型,必须为BM DWORD bfSi

7、ze; / 位图文件的大小,以字节为单位WORDbfReserved1; / 位图文件保留字,必须为0WORDbfReserved2; / 位图文件保留字,必须为0DWORD bfOffBits; / 位图数据的起始位置,以相对于位图/ 文件头的偏移量表示,以字节为单位 BITMAPFILEHEADER;3、位图信息头BMP位图信息头数据用于说明位图的尺寸等信息。typedef struct tagBITMAPINFOHEADERDWORD biSize; / 本结构所占用字节数LONGbiWidth; / 位图的宽度,以像素为单位LONGbiHeight; / 位图的高度,以像素为单位WOR

8、D biPlanes; / 目标设备的级别,必须为1WORD biBitCount/ 每个像素所需的位数,必须是1(双色), 4(16色),/8(256色)或24(真彩色)之一DWORD biCompression; / 位图压缩类型,必须是 0(不压缩), /1(BI_RLE8压缩类型)或2(BI_RLE4压缩类型)之一DWORD biSizeImage; / 位图的大小,以字节为单位LONGbiXPelsPerMeter; / 位图水平分辨率,每米像素数LONGbiYPelsPerMeter; / 位图垂直分辨率,每米像素数DWORD biClrUsed;/ 位图实际使用的颜色表中的颜色数

9、DWORD biClrImportant;/ 位图显示过程中重要的颜色数 BITMAPINFOHEADER;4、颜色表颜色表用于说明位图中的颜色,它有若干个表项,每一个表项是一个RGBQUAD类型的结构,定义一种颜色。RGBQUAD结构的定义如下:typedef struct tagRGBQUAD BYTErgbBlue;/ 蓝色的亮度(值范围为0-255)BYTErgbGreen; / 绿色的亮度(值范围为0-255)BYTErgbRed; / 红色的亮度(值范围为0-255)BYTErgbReserved;/ 保留,必须为0 RGBQUAD;颜色表中RGBQUAD结构数据的个数有biBit

10、Count来确定:当biBitCount=1,4,8时,分别有2,16,256个表项;当biBitCount=24时,没有颜色表项。5、位图信息头和颜色表位图信息头和颜色表组成位图信息,BITMAPINFO结构定义如下:typedef struct tagBITMAPINFO BITMAPINFOHEADER bmiHeader; / 位图信息头RGBQUAD bmiColors1; / 颜色表 BITMAPINFO;6、位图数据位图数据记录了位图的每一个像素值,记录顺序是在扫描行内是从左到右,扫描行之间是从下到上。位图的一个像素值所占的字节数:当biBitCount=1时,8个像素占1个字节

11、;当biBitCount=4时,2个像素占1个字节;当biBitCount=8时,1个像素占1个字节;当biBitCount=24时,1个像素占3个字节;Windows规定一个扫描行所占的字节数必须是4的倍数(即以long为单位),不足的以0填充。第2章 系统分析2.1课设题目与实现功能2.1.1 课设题目图像处理类简易图像处理软件2.1.2 功能实现1. 封装一个CDib类;2. 完成BMP位图的打开、显示、保存、另存为、重新载入等基本的文件操作;3. 对BMP图片进行一些几何变换,比如平移、转置等;4. 对位图进行灰度化操作,完成将256色图片变为灰度图片、把真彩图像变为灰度图像、将灰度图

12、像二值化、将灰度图像反色等;5. 对图像进行亮度的调节,如增加亮度与降低亮度;6. 对图像进行加噪处理,如高斯噪声、椒盐噪声,然后利用中值滤波、均值滤波等操作,去除噪声点;7. 对BMP图像进行基本形态学的处理:膨胀与腐蚀。2.2 系统环境2.2.1 硬件环境无特殊要求2.2.2 软件环境操作系统:Windows 操作系统平台:Microsoft Visual C+ 6.0框架:基于MFC的SDI第3章 系统设计2.1几何平移平移(translation)变换大概是几何变换中最简单的一种了。如图2.1所示,初始坐标为(x0,y0)的点经过平移(tx,ty)(以向右,向下为正方向)后,坐标变为(

13、x1,y1)。这两点之间的关系是x1=x0+tx ,y1=y0+ty。图2.1 平移示意图以矩阵的形式表示为(2.1)我们更关心的是它的逆变换:(2.2)这是因为:我们想知道的是平移后的图象中每个象素的颜色。例如我们想知道,新图中左上角点的RGB值是多少?很显然,该点是原图的某点经过平移后得到的,这两点的颜色肯定是一样的,所以只要知道了原图那点的RGB值即可。那么到底新图中的左上角点对应原图中的哪一点呢?将左上角点的坐标(0,0)入公式(2.2),得到x0=-tx ,y0=-ty;所以新图中的(0,0)点的颜色和原图中(-tx , -ty)的一样。这样就存在一个问题:如果新图中有一点(x1,y

14、1),按照公式(2.2)得到的(x0,y0)不在原图中该怎么办?通常的做法是,把该点的RGB值统一设成(0,0,0)或者(255,255,255)。另一个问题是:平移后的图象是否要放大?一种做法是不放大,移出的部分被截断。2.2 256色灰度化2.2.1 256色图片与灰度图片256色图片是8位色的图,可以显示最多8位的颜色,它是彩色的图像。灰度图只含亮度信息,不含彩色信息。灰度是以灰阶来显示图像的,是在黑与白以及它们之间的灰色的程度来显示图像,相当于以前的黑白电视机的那样的显示的样子。灰度化处理在许多图像处理中是很重要的一步,它的结果是后续处理的基础。2.2.2 256色图片灰度化的实现1、

15、基本概念知道图像某点的R、G、B值,要得到亮度信息,则可由下式计算出: Y=0.299*R+0.587*G+0.114*B 在实际计算时,可按下式优化算法进行: Y=(306*R+601*G+117*B +512)10而在用BMP表示的灰度图中,其红(R)、绿(G)、蓝(B)三个分量的值相等,即有 R=G=B 2、灰度化处理 为了把彩色图像转换为灰度图像,首先要找出彩色图像的颜色值:R、G、B。然后,通过上式计算,即可得出亮度值Y。再令:R=G=B=Y,则得到的新的图像,就是灰度图像。2.3二值化2.3.1 二值图像 二值图像是一种简单的图像格式,它只有两个灰度级,即0表示黑色的像素点,255

16、表示白色的像素点,其灰度值没有中间过渡的图像。二值图像一般用来描述文字或者图形,其优点是占用空间少,缺点是,当表示人物,风景的图像时,二值图像只能描述其轮廓,不能描述细节。这时候要用更高的灰度级。二值图像经常使用位图格式存储。2.3.2 二值化实现给定一个阈值,如果大于该阈值则用白色来表示,若小于该阈值就用黑色来填充。本程序中将阈值设置为110,达到基本的效果。实现程序段如下:/ 每行for(i = 0; i cyDIB; i+)/ 每列for(j = 0; j cxDIB; j+)/ 指向DIB第i行,第j个象素的指针lpSrc = (unsigned char*)pPixelStart +

17、 lLineBytes * (cyDIB - 1 - i) + j;/ 计算新的灰度值if(*lpSrc110) *lpSrc=BYTE(0);else *lpSrc = BYTE(255);2.4亮度变化2.4.1 亮度亮度是指发光体(反光体)表面发光(反光)强弱的物理量。人眼从一个方向观察光源,在这个方向上的光强与人眼所“见到”的光源面积之比,定义为该光源单位的亮度,即单位投影面积上的发光强度。亮度的单位是坎德拉/平方米(cd/m2) 亮度是人对光的强度的感受。它是一个主观的量。2.4.2 增加亮度与降低亮度亮度变化一个最简单的方法,就是对每一个像素点的RGB分量,同时增加或者减少某一个阈

18、值如16之后,再逐一保存下来。具体实现如下:/ 每行for(i = 0; i cyDIB; i+)/ 每列for(j = 0; j cxDIB; j+)/ 指向DIB第i行,第j个象素的指针lpSrc = (unsigned char*)pPixelStart + lLineBytes * (cyDIB - 1 - i) + j;/ 计算新的灰度值if(*lpSrc239)*(lpSrc) = BYTE(16+*lpSrc);2.5添加噪声2.5.1 高斯噪声(Gaussian noise) 是指它的概率密度函数服从高斯分布(即正态分布)的一类随机噪声。2.5.2 椒盐噪声(Salt&Pepp

19、er noise)椒盐噪声是由图像传感器,传输信道,解码处理等产生的黑白相间的亮暗点噪声。椒盐噪声往往由图像切割引起。 去除脉冲干扰级椒盐噪声最常用的算法是中值滤波。2.6滤波2.6.1 中值滤波中值滤波法是一种非线性平滑技术,它将每一象素点的灰度值设置为该点某邻域窗口内的所有象素点灰度值的中值. 实现方法: 1、通过从图像中的某个采样窗口取出奇数个数据进行排序 2、用排序后的中值取代要处理的数据即可 中值滤波法对消除椒盐噪音非常有效,在光学测量条纹图象的相位分析处理方法中有特殊作用,但在条纹中心分析方法中作用不大。中值滤波在图像处理中,常用于用来保护边缘信息,是经典的平滑噪声的方法。中值滤波

20、原理 中值滤波是基于排序统计理论的一种能有效抑制噪声的非线性信号处理技术,中值滤波的基本原理是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代替,让周围的像素值接近的真实值,从而消除孤立的噪声点。2.6.2 均值滤波均值滤波是典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该模板包括了其周围的临近像素(以目标象素为中心的周围8个象素,构成一个滤波模板,即去掉目标象素本身)。再用模板中的全体像素的平均值来代替原来像素值。 均值滤波也称为线性滤波,其采用的主要方法为领域平均法。线性滤波的基本原理是用均值代替原图像中的各个像素值,即对待处理的当前像素点(x,y),选择一个模板,

21、该模板由其近邻的若干像素组成,求模板中所有像素的均值,再把该均值赋予当前像素点(x,y),作为处理后图像在该点上的灰度个g(x,y),即个g(x,y)=1/m f(x,y),其中m为该模板中包含当前像素在内的像素总个数。2.7膨胀与腐蚀数学形态学中二值图像的形态变换是一种针对集合的处理过程。其形态算子的实质是表达物体或形状的集合与结构元素间的相互作用,结构元素的形状就决定了这种运算所提取的信号的形状信息。形态学图像处理是在图像中移动一个结构元素,然后将结构元素与下面的二值图像进行交、并等集合运算。基本的形态运算是腐蚀和膨胀。在形态学中,结构元素是最重要最基本的概念。结构元素在形态变换中的作用相

22、当于信号处理中的“滤波窗口”。用B(x)代表结构元素,对工作空间E中的每一点x,腐蚀和膨胀的定义为: 用B(x)对E进行腐蚀的结果就是把结构元素B平移后使B包含于E的所有点构成的集合。用B(x)对E进行膨胀的结果就是把结构元素B平移后使B与E的交集非空的点构成的集合。先腐蚀后膨胀的过程称为开运算。它具有消除细小物体,在纤细处分离物体和平滑较大物体边界的作用。先膨胀后腐蚀的过程称为闭运算。它具有填充物体内细小空洞,连接邻近物体和平滑边界的作用。 可见,二值形态膨胀与腐蚀可转化为集合的逻辑运算,算法简单,适于并行处理,且易于硬件实现,适于对二值图像进行图像分割、细化、抽取骨架、边缘提取、形状分析。

23、第4章 调试结果1、程序整体框架如下2、图像转置3、图像平移19 4、图片反色以及二值化的效果 5、增加亮度与降低亮度后的图片 6、添加高斯噪声与椒盐噪声 7、添加椒盐噪声滤波后的效果,可以发现中值滤波对去除椒盐噪声效果很明显,后面的图片是添加高斯噪声之后用均值滤波去噪:第5章 小结由于对图像处理还是第一次接触,刚开始对这次课程设计还感到很大的盲目,平时对VC+用得也不是很多,给这次课设造成很大的困难,因此我下定决心刻苦研究学习,在本次课设之前我查了大量的相关资料,仔细阅读了很多函数的功能,也很多次的练习VC+的编程,请教了同学很多的问题,这些工作对这次的成功发挥了至关重要的作用。通过一星期的

24、课程设计,对BMP图片有了更进一步的了解,同时也知道了什么叫做DIB。不过,由于以前对图像处理没有深入的学习,对于图像处理的知识还是很欠缺。经过一点一滴的学习,让我体会到了如何通过自己的努力去认知一个新事物。而其中更重要的是端正学习态度,只有真正下功夫去学习,才能有收获。正所谓“一份耕耘,一份收获”,通过一星期的努力终于将本次课设顺利完成。通过本次课设,我学会了如何去分析问题,如何找出自己设计中的不足,通过找资料达到自我学习,继而完成自己的任务。 第6章 参考文献1 谢凤英,赵丹培. Visual C+数字图像处理. 电子工业出版社,2008.2 冈萨雷斯等著. 数字图像处理. 电子工业出版社

25、,2007.93 朱虹. 数字图像处理基础. 科学出版社,2005.94 王占全,徐慧. 精通Visual C+数字图像处理技术与工程案例. 人民邮电出版社,20095 左飞. Visual C+数字图像处理开发入门与编程实践. 电子工业出版社,2008.36 刘直芳,王运琼,朱敏. 数字图像处理与分析. 清华大学出版社,2006.87 陈天华. 数字图像处理. 清华大学出版社,2007.68 张弘. 数字图像处理与分析. 机械工业出版社,2007.5第7章 部分源代码1、/dib.h头文件,定义一个CDib类#includestdafx.h#include math.h/宏定义#define

26、 IS_WIN30_DIB(lpbi) (*(LPDWORD)(lpbi)=sizeof(BITMAPINFOHEADER) /判断是不是win 3.0的dib#define DIB_HEADER_MAKER(WORD)(M5)2)#define U 4 /高斯分布的均值#define D 6 /高斯分布的均方差/CDib类/*class CDib/成员变量/*private:LPSTR pDib;/ 指向dib位图的指针LPSTR pPalette;/指向调色板的指针LPSTR pPixelStart; /指向位图像素开始位置的指针/成员函数声明/*public:void MeanFilte

27、r(int iTempH, int iTempW, int iTempMX, int iTempMY, FLOAT * fpArray, FLOAT fCoef);void AddSaltPepperNoise();int Gaus_S();void AddGaussNoise();BOOL Template(LPSTR lpDIBBits, int iTempH, int iTempW, int iTempMX, int iTempMY, FLOAT * fpArray, FLOAT fCoef);unsigned char GetMedianNum(unsigned char * bArr

28、ay, int iFilterLen);bool MidFilter(int iFilterH, int iFilterW, int iFilterMX, int iFilterMY);void Inverse();void Binaryzation();void DecreaseBrightness();void IncreaseBrightness();void Gray24Bits();BOOL TranslationDIB1(LONG lXOffset, LONG lYOffset);BOOL TransposeDIB();BOOL ErosionDIB();BOOL Dilation

29、DIB();CDib();/无参构造函数CDib(); /析构函数/提供给用户的各种接口bool OpenBmpFile(CFile & file); / 打开bmp文件bool Show(CDC & dc,int x,int y); /将图片显示到设备描述表的固定位置,(x,y)指的是图片左上角要显示的位置bool SaveToFile(CFile & file ); / 保存至文件bool IsExist();unsigned GetColorNumInPal()const; /返回图像所使用的颜色种数unsigned GetPaletteSize() const; /返回调色板大小,以字

30、节为单位unsigned GetWidth() const; /返回图像宽度,以像素为单位unsigned GetHeight() const; / 返回图像高度,以像素为单位void Convert256toGray();2、/CDib类的实现,dib.cpp文件#includestdafx.h#include#include dib.h/*/无参构造函数CDib:CDib()pDib = NULL; /指向dib位图的指针pPalette = NULL; /指向调色板的指针pPixelStart = NULL; /指向位图像素开始位置的指针/*/析构函数CDib:CDib()/*/将fil

31、e所引用的文件调入内存,如果成功执行返回true,并且给各成员指针赋值;否则返回false,bool CDib:OpenBmpFile(CFile & file)DWORD dwBitsSize; dwBitsSize=file.GetLength(); / bmp文件的大小,单位为字节/尝试读取文件头,并判断是否是bmp文件BITMAPFILEHEADER bfHeader;if(file.Read(LPSTR)&bfHeader,sizeof(bfHeader)!=sizeof(bfHeader)AfxMessageBox(_T(尝试打开bmp文件头失败!);return false;if

32、(bfHeader.bfType!=DIB_HEADER_MAKER)AfxMessageBox(_T(尝试打开的文件不是bmp文件!);return false;/为DIB分配内存,给各成员指针赋值pDib= (LPSTR) new chardwBitsSize-sizeof(bfHeader);if(file.Read(pDib,dwBitsSize-sizeof(bfHeader)!=dwBitsSize-sizeof(bfHeader)AfxMessageBox(_T(读取位图文件失败!);return false;pPalette=pDib+sizeof(BITMAPINFOHEAD

33、ER);pPixelStart=pDib+sizeof(BITMAPINFOHEADER)+GetPaletteSize();return true;/*/将图片显示到设备描述表的固定位置,(x,y)指的是图片左上角要显示的位置,这个函数应该包含创建调色板的模块bool CDib:Show(CDC & dc,int x,int y)int i=GetPaletteSize();if(i!=0)/如果不是真彩色图像/创建调色板WORD wColors=GetColorNumInPal();LOGPALETTE *pLP=(LOGPALETTE *)new charsizeof(LOGPALETT

34、E)+(wColors-1)*sizeof(PALETTEENTRY);pLP-palVersion=0x300;pLP-palNumEntries=wColors;for(int i=0;ipalPalEntryi.peRed=(BITMAPINFO*)pDib)-bmiColorsi.rgbRed;pLP-palPalEntryi.peGreen=(BITMAPINFO*)pDib)-bmiColorsi.rgbGreen;pLP-palPalEntryi.peBlue=(BITMAPINFO*)pDib)-bmiColorsi.rgbBlue;pLP-palPalEntryi.peFla

35、gs=0;CPalette palette;palette.CreatePalette(pLP);HPALETTE hPal=(HPALETTE)(&palette)-m_hObject;HPALETTE hOldPal=:SelectPalette(HDC)dc,hPal,TRUE);:SetStretchBltMode(HDC)dc,COLORONCOLOR);if(:StretchDIBits(HDC)dc,x,y,GetWidth(),GetHeight(),0,0,GetWidth(),GetHeight(),pPixelStart,(BITMAPINFO*)pDib,DIB_RGB

36、_COLORS,SRCCOPY)=GDI_ERROR)AfxMessageBox(_T(绘制DIB位图失败!);return false;:SelectPalette(HDC)dc,hOldPal,TRUE);delete pLP;else/绘制真彩色图像if(:StretchDIBits(HDC)dc,x,y,GetWidth(),GetHeight(),0,0,GetWidth(),GetHeight(),pPixelStart,(BITMAPINFO*)pDib,DIB_RGB_COLORS,SRCCOPY)=GDI_ERROR)AfxMessageBox(_T(绘制DIB位图失败!);

37、return false;return true;/*/保存位图到file所引用的文件,如果成功执行返回true,否则返回falsebool CDib: SaveToFile(CFile & file )LPSTR lpbi;lpbi=pDib;if(!IS_WIN30_DIB(lpbi)AfxMessageBox(_T(要保存的不是win3.0DIB,本程序不支持!);return false;/填充文件头BITMAPFILEHEADER bmfHeader;bmfHeader.bfType=DIB_HEADER_MAKER;/计算文件大小DWORD dwBitsSize=(*(LPDWOR

38、D)(lpbi)+GetPaletteSize();long width=(BITMAPINFOHEADER*)pDib)-biWidth)*(BITMAPINFOHEADER*)pDib)-biBitCount)+31)/32)*4; /计算一行所占的字节数dwBitsSize=dwBitsSize+width*(BITMAPINFOHEADER*)pDib)-biHeight);bmfHeader.bfSize=dwBitsSize+sizeof(BITMAPFILEHEADER);bmfHeader.bfReserved1=0;bmfHeader.bfReserved2=0;bmfHea

39、der.bfOffBits=sizeof(BITMAPFILEHEADER)+(*(LPDWORD)(lpbi)+GetPaletteSize();/尝试写文件tryfile.Write(LPSTR)&bmfHeader,sizeof(BITMAPFILEHEADER);file.Write(pDib,dwBitsSize);catch(CFileException *e)e-ReportError();e-Delete();return false;return true;/*/返回调色板中的颜色种数,返回的只是实际所用颜色数的近似值,一般会稍微大于实际所用颜色种数unsigned CDib

40、:GetColorNumInPal()constif(BITMAPINFOHEADER*)pDib)-biClrUsed!=0)return (BITMAPINFOHEADER*)pDib)-biClrUsed;int i=(BITMAPINFOHEADER*)pDib)-biBitCount;switch(i)case 1:return 2;break;case 4:return 16;break;case 8:return 256;break;default:return 0;break;/*/返回调色板大小,以字节为单位unsigned CDib:GetPaletteSize() con

41、streturn GetColorNumInPal()*sizeof(RGBQUAD);/*/返回图像宽度,以像素为单位unsigned CDib:GetWidth() constreturn (BITMAPINFOHEADER*)pDib)-biWidth;/*/ 返回图像高度,以像素为单位unsigned CDib:GetHeight() constreturn (BITMAPINFOHEADER*)pDib)-biHeight;/*/判断当前客户区是否存在BMP图片bool CDib:IsExist()if (pDib = NULL)return false; elsereturn true;unsigned char CDib:GetMedianNum(unsigned char * bArray, int iFilterLen)/ 循环变量inti;intj;/ 中间变量unsigned char bTemp;/ 用冒泡法对数组进行排序for (j = 0; j iFilter

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 研究报告 > 信息产业


经营许可证编号:宁ICP备18001539号-1