2023年-多媒体信息处理技术报告.docx
1.8 MP图像的结构与显示BMP文件是Windows操作系统所推荐和支持的图像文件格式,是一种将 内存或显示器的图像数据不经过压缩而直接按位存盘的文件格式,所以称为 位图(bitmap)文件,因其文件扩展名为BMP,故称为BMP文件格式,简称 BMP文件。BMP图像文件被分成4个部分:位图文件头(Bitmap File Header)、 位图信息头(Bitmap Info Header) 颜色表(Color Map)和位图数据(即 图像数据,Data Bits 或 Data Body) o为了实现BMP图像的各种处理(如显示,平滑,锐化等),我们必须清楚 BMP图像文件的组成,下面将详细介绍一下BMP图像的文件格式。1.9 BMP图像的文件格式BMP图像文件由文件头、文件信息头、调色板和图像数据组成。(1)文件头文件头是一个结构,长度为14个字节,各组成部分如下:WORD bfTypeDWORD bfSizeWORD bfReservedlWORD bfReservedlDWORD bfOffBits/2个字节表示文件类型,其值为“BM/4个字节表示文件的大小。/2个字节保留,其值为Oo/2个字节保留,其值为Oo/4个字节表示第一个像素的偏移量由文件头可以获得该文件型、小及第一个像素的偏移地址。(2)文件信息头文件信息头也是一个结构体,长度为40个字节,各组成部分如下:DWORLD biSize 4个字节存放文件信息头的长度,其值为40。LONG biWidth 4个字节存放位图的宽度。LONG biHeight 4个字节存放位图的高度。WORD biplanesWORD biBitcount 2个字节存放平面的数目,其值为1。两个字节存放每个像素所占的位数,其值可以是1, 4, 8, 24等。DWORD biCompression 4个字节指定位图是否压缩,其值可以 是常值BI_RGB,BI_RLE8,BI_RLE4等。如果没有压缩则为BI_RGB(即0)。DWORD biSizeimageLONG biXPelsPerMeter 常不用将其设为0。LONG biYPelsPerMeter常不用将其设为0。DWORD biClrUsed 若使用所有颜色则值为0。DWORD biClrlmportant全部重要则值为0o/ 4个字节表示位图的实际大小。4个字节指定目标设备的水平分辨率,通4个字节指定目标设备的垂直分辨率,通/ 4个字节指定图像实际用到的颜色数,4个字节指定图像中重要的颜色数,若由文件信息头可以获得有关位图的详细信息,位图的实际大小并不等于 biWidth和biHeight的乘积。因为在保存位图时要求每一行的字数必须是4 的整数倍,如果不是,则需要补齐。(3)颜色表颜色表实际上是一个RGBQUAD结构的数组,数组的长度由biClrUsed指 定(如果该值为零,则由biBitCount指定,即2的biBitCount次1个元素)。 RGBQUAD结构是一个结构体类型,占4个字节,其定义如下:BYTE rgbRed红色分量BYTErgbGreen绿色分量BYTErgbBlue蓝色分量BYTErgbReserved保留位有些位图需要颜色表;有些位图(如真彩色图)则不需要颜色表,颜色 表的长度由BTTMAPTNFOHEADER结构中biBitCount分量决定。对于biBitCo unt值为1的二值图像,每像素占Ibit,图像中只有两种(如黑白)颜色, 颜色表也就有2'=2个表项,整个颜色表的大小为2*sizeof(RGBQUAD) =2*4=8 个字节;对于biBitCount值为8的灰度图像,每像素占8bit,图像中有28 =256种颜色,颜色表也就有256个表项,且每个表项的R、G、B分量相等, 整个颜色表的大小为256*sizeof (RGBQUAD)=256*4=1024个字节;而对于bi BitCount=24的真彩色图像,由于每像素3个字节中分别代表了 R、G、B三 分量的值,此时不需要颜色表,因此真彩色图的BITMAP1NF0HEADER结构后 面直接就是位图数据。(4)位图数据紧跟在颜色表之后的是图像数据字节阵列,即图像数据,记录了图像的每 一个像素值。对于有颜色表的位图,位图数据就是该像素颜色在调色板中的 索引值;对于真彩色图,位图数据就是实际的R、G、B值(三个分量的存储 顺序是B、G、R)。相应地,对于2色图象,用1位表示颜色,因此一个字 节表示8个像素;对于16色图象,用4位表示一个像素的颜色,一个字节 表示2个像素;对于256色图象,用8位表示一个像素的颜色,一个字节只 表示1个像素。图像的每一扫描行由表示图像的像素的连素字节组成,每一 行的字节数取决于图像的颜色数目和用像素表示的图像宽度。扫描行是由底 向上存储的,这就是说,阵列中的每一个字节表示位图左下角的像素,而最 后一个字节表示位图右上角的像素。1.10 BMP图象文件显示在VC+的的应用程序中显示图像,通常有两种方法。一种方法是在应用 程序中加入固定的位图,为该图指定ID,使用静态图片控件或ActiveX控件 来显示图象。另一种方法是使用位图类Cbitmap,利用Loadlmage函数动态 地从系统盘的文件中载入位图图像,将载入的图像句柄和Cbitmap类相关 连。使用BitBlt函数把位图拷贝到能够显示图像的设备场境中。设备场境 中包含有关于系统、应用程序和绘图窗口的信息。我们还可以使用 StretchBlt函数拷贝图像,并调整图像的大小,使之适合在特定的设备场境中显示。各函数的用法如下所示:HBITMAP hbitmap;/*加载BMP文件,filename为BMP文件名*/Hbitmap=(HBITMAP):Loadimage(AfxGetlnstanceHandle(), filename ,TMAGE_BTTMAP, 0, 0, LRJ.OADFROMFILE|LR_CREATEDTBSECTTON);/*Bitmap为Cbitmap类的一个对象,实现图象句柄和类相关连*/ Bitmap. Attach(hbitmap);/*拷贝位图到屏幕*/BitBlt(10, 10, width, height, &dc, 0, 0, SRCCOPY);/*拷贝图象并调整显示大小*/StrwtchBlt(10, 10, Rwidth, Rheight, &dc, width, height, SRCCOPY);实际上,由BMP图象文件格式可以很方便地从文件中读出各部分信息, 在获得调色板和图象数据后,利用SetDIBitsToDevice函数或StrechDIBits 函数来显示图象或打印图象。2 .颜色表的修改2.1 RGB模型RGB模式是基于自然界中3种基色光的混合原理,将R、G、B三种基色 按照从0 (黑)到255 (白色)的亮度值在每个色阶中分配,从而指定其色彩, 当不同亮度的基色混合后共产生2% =16777216种颜色。在理想条件下,加 色原理R+G=Y, R+B41, G+B=C。当3种基色的亮度值相等时,产生灰色,当3 种亮度值都是255时,产生纯白色;而当所有亮度值都是0时,产生纯黑色。 当3种色光混合生成的颜色一般比原来的颜色亮度值高,所以RGB模式产生 颜色的方法又被称为加色混合。2.2 颜色表的修改一幅图像有众多的事物,为了按照人们的意愿,传达某种信息,突出自 己最想表达的信息,可以用色彩来完成!那么,在我们的图像中如何完成这 样的任务呢?256色的BMP格式的图像是有颜色表的。颜色表分R, G, B三种基色。 首先,我们应该把颜色表找到并提取出来。根据BMP图像数据存储的特点, 我们很容易找到颜色表。找到颜色表之后,按照我们的需要,我们所想表达 突出的色彩就可以通过修改颜色表的R, G, B三基色的值来完成。将三基色提 取出来,并恰当的更改三基色在0到255间的值的大小,使得某种颜色变得 突出,以来表达我们想要突出的色彩!例如我们想使花变的更红一些,我们 就可以适当的增加R基色在0到255间的值,减小G, B两种基色的大小, 也就是改变G、B基色在0到255间的值,那么红色的像素点就会增加红的 级数,这样就会使图像的红色更加突出。同理,适当增加G基色在0到255 间的值,减小R, B两种基色在0到255间的值,绿色的像素点也就相应的 增加了级数,那么就可以使图像的绿色更加突出。例如在一幅春天草地的图 像中,增加G基色的级数,就可以使小草显得生机勃勃,以表达春意盎然的 景象和情感,完成我们的表达重点了!我们更改了 256色的BMP格式的颜色表,让原有的图像的某种颜色更加 突出,来实现我们所需要的色彩的突出。我们更改某种基色,或者更改几种 基色,即重新给某种基色在0到255间赋值,使得图像的像素都随之适当变 化,达到我们所需的效果。3 .实验结果与分析以512*512的256色图像进行结果的验证分析。程序运行结果图如下:图1原图图2原图的颜色表图1为程序运行打开的原图,图2为程序运行获得的颜色表。图3为修 改颜色表的对话框,这次修改颜色表目的是突出蓝色效果,变化后的结果为 图4。图15为修改颜色表突出蓝色效果后,获得的颜色表,在这幅颜色表截 图中可以很明显的看到颜色表中蓝色的颜色条增加了许多。同理可获得绿色和红色的突出效果。如图6,图7,图8,图9所示。图6绿色突*图8红色突出效果图9红色效果颜色表4 .总结本文讨论了基于VC+6. 0集成开发环境,打开一幅256色BMP图像,通 过修改其颜色表获得相应的颜色突出效果。本文对BMP图像的结构特点和显 示做了简单的介绍,着重于颜色表的修改。本次的实现,方法总体来说是比 较快速和灵活的。能很快的完成想要的色彩突出效果,最终的结果也是令人 比较满意的。能够完整的保持图像的形态,只要简单的改变R、G、B三基色 0到255间的值,就能得到色彩突出效果,从实验结果来看,基本上完成了 本次作业的任务要求。通过本次实验,使我对BMP图像的结构有了更深刻的了解,并且学会了 如何针对BMP图像进行一些相关的数字图像的分析和处理,以达到我们处理 数字图像的最终目的,为以后的学习研究打下了坚实的基础。