还剩4页未读,继续阅读
文本内容:
1.8MP图像的结构与显示BMP文件是Windows操作系统所推荐和支持的图像文件格式,是一种将内存或显示器的图像数据不经过压缩而直接按位存盘的文件格式,所以称为位图bitmap文件,因其文件扩展名为BMP,故称为BMP文件格式,简称BMP文件BMP图像文件被分成4个部分位图文件头Bitmap FileHeader、位图信息头Bitmap InfoHeader>颜色表Color Map和位图数据即图像数据,Data Bits或Data Bodyo为了实现BMP图像的各种处理如显示,平滑,锐化等,我们必须清楚BMP图像文件的组成,下面将详细介绍一下BMP图像的文件格式
1.9图像的文件格式BMPBMP图像文件由文件头、文件信息头、调色板和图像数据组成1文件头文件头是一个结构,长度为14个字节,各组成部分如下:WORD bfType//2个字节表示文件类型,其值为“BMDWORD bfSize//4个字节表示文件的大小WORD bfReservedl//2个字节保留,其值为OoWORD bfReservedl//2个字节保留,其值为OoDWORD bfOffBits由文件头可以获得该文件型、小及第一个像素的偏移地址//4个字节表示第一个像素的偏移量2文件信息头文件信息头也是一个结构体,长度为40个字节,各组成部分如下:DWORLD biSize〃4个字节存放文件信息头的长度,其值为40LONG biWidth〃4个字节存放位图的宽度LONG biHeight〃4个字节存放位图的高度WORD biplanes〃2个字节存放平面的数目,其值为1WORD biBitcount〃两个字节存放每个像素所占的位数,其值可以是1,4,8,24等DWORD biCompression〃4个字节指定位图是否压缩,其值可以是常值BI_RGB,BI_RLE8,BI_RLE4等如果没有压缩则为BI_RGB(即0)DWORD biSizeimage//4个字节表示位图的实际大小〃4个字节指定目标设备的水平分辨率,通LONG biXPelsPerMeter常不用将其设为0〃4个字节指定目标设备的垂直分辨率,通LONG biYPelsPerMeter常不用将其设为0//4个字节指定图像实际用到的颜色数,DWORD biClrUsed若使用所有颜色则值为0〃4个字节指定图像中重要的颜色数,若DWORD biClrlmportant全部由重文要件则信值息为头0o可以获得有关位图的详细信息,位图的实际大小并不等于biWidth和biHeight的乘积因为在保存位图时要求每一行的字数必须是4的整数倍,如果不是,则需要补齐
(3)颜色表颜色表实际上是一个RGBQUAD结构的数组,数组的长度由biClrUsed指定(如果该值为零,则由biBitCount指定,即2的biBitCount次1个元素)RGBQUAD结构是一个结构体类型,占4个字节,其定义如下BYTE rgbRed〃红色分量BYTE rgbGreen〃绿色分量BYTE rgbBlue〃蓝色分量BYTE rgbReserved〃保留位有些位图需要颜色表;有些位图(如真彩色图)则不需要颜色表,颜色表的长度由BTTMAPTNFOHEADER结构中biBitCount分量决定对于biBitCo unt值为1的二值图像,每像素占Ibit,图像中只有两种如黑白颜色,颜色表也就有2=2个表项,整个颜色表的大小为2*sizeofRGBQUAD=2*4=8个字节;对于biBitCount值为8的灰度图像,每像素占8bit,图像中有28=256种颜色,颜色表也就有256个表项,且每个表项的R、G、B分量相等,整个颜色表的大小为256*sizeofRGBQUAD=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.10BMP图象文件显示在VC++的的应用程序中显示图像,通常有两种方法一种方法是在应用程序中加入固定的位图,为该图指定ID,使用静态图片控件或ActiveX控件来显示图象另一种方法是使用位图类Cbitmap,利用Loadlmage函数动态地从系统盘的文件中载入位图图像,将载入的图像句柄和Cbitmap类相关连使用BitBlt函数把位图拷贝到能够显示图像的设备场境中设备场境中包含有关于系统、应用程序和绘图窗口的信息我们还可以使用StretchBlt函数拷贝图像,并调整图像的大小,使之适合在特定的设备场境中显示各函数的用法如下所示:HBITMAP hbitmap;/*加载BMP文件,filename为BMP文件名*/Hbitmap=HBITMAP::LoadimageAfxGetlnstanceHandle,filename,TMAGE_BTTMAP,0,0,LRJ.OADFROMFILE|LR_CREATEDTBSECTTON;/*Bitmap为Cbitmap类的一个对象,实现图象句柄和类相关连*/Bitmap.Attachhbitmap;/*拷贝位图到屏幕*/BitBlt10,10,width,height,dc,0,0,SRCCOPY;/*拷贝图象并调整显示大小*/StrwtchBlt10,10,Rwidth,Rheight,dc,width,height,SRCCOPY;实际上,由BMP图象文件格式可以很方便地从文件中读出各部分信息,在获得调色板和图象数据后,利用SetDIBitsToDevice函数或StrechDIBits函数来显示图象或打印图象颜色表的修改
2.
2.1RGB模型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绿色突*图9红色效果颜色表图8红色突出效果.总结4本文讨论了基于VC++
6.0集成开发环境,打开一幅256色BMP图像,通过修改其颜色表获得相应的颜色突出效果本文对BMP图像的结构特点和显示做了简单的介绍,着重于颜色表的修改本次的实现,方法总体来说是比较快速和灵活的能很快的完成想要的色彩突出效果,最终的结果也是令人比较满意的能够完整的保持图像的形态,只要简单的改变R、G、B三基色0到255间的值,就能得到色彩突出效果,从实验结果来看,基本上完成了本次作业的任务要求通过本次实验,使我对BMP图像的结构有了更深刻的了解,并且学会了如何针对BMP图像进行一些相关的数字图像的分析和处理,以达到我们处理数字图像的最终目的,为以后的学习研究打下了坚实的基础。