文档介绍:: .
管理信息化信息技术多媒体
色表也就有 256 个表项,且每个表项的 R、G、B 分量相等,整个颜
色表的大小为 256*sizeof(RGBQUAD)=256*4=1024 个字节;而对于
biBitCount=24 的真彩色图像,由于每像素 3 个字节中分别代表了 R、
G 、 B 三 分 量 的 值 , 此 时 不 需 要 颜 色 表 , 因 此 真 彩 色 图 的
BITMAPINFOHEADER 结构后面直接就是位图数据。
(4)位图数据
紧跟在颜色表之后的是图像数据字节阵列,即图像数据,记录了图
像的每一个像素值。对于有颜色表的位图,位图数据就是该像素颜
色在调色板中的索引值;对于真彩色图,位图数据就是实际的 R、
G、B 值(三个分量的存储顺序是 B、G、R)。相应地,对于 2 色图
象,用 1 位表示颜色,因此一个字节表示 8 个像素;对于 16 色图
象,用 4 位表示一个像素的颜色,一个字节表示 2 个像素;对于 256
色图象,用 8 位表示一个像素的颜色,一个字节只表示 1 个像素。
图像的每一扫描行由表示图像的像素的连素字节组成,每一行的字
节数取决于图像的颜色数目和用像素表示的图像宽度。扫描行是由
底向上存储的,这就是说,阵列中的每一个字节表示位图左下角的
像素,而最后一个字节表示位图右上角的像素。 图象文件显示
在 VC++的的应用程序中显示图像,通常有两种方法。一种方法
是在应用程序中加入固定的位图,为该图指定 ID,使用静态图片控
件或 ActiveX 控件来显示图象。另一种方法是使用位图类 Cbitmap,
利用 LoadImage 函数动态地从系统盘的文件中载入位图图像,将载
入的图像句柄和 Cbitmap 类相关连。使用 BitBlt 函数把位图拷贝
到能够显示图像的设备场境中。设备场境中包含有关于系统、应用
程序和绘图窗口的信息。我们还可以使用 StretchBlt 函数拷贝图
像,并调整图像的大小,使之适合在特定的设备场境中显示。各函数
的用法如下所示:
HBITMAPhbitmap;
/*加载 BMP 文件,filename 为 BMP 文件名*/
Hbitmap=(HBITMAP)::LoadImage(AfxGetInstanceHandle(),filen
ame,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
/*Bitmap 为 Cbitmap 类的一个对象,实现图象句柄和类相关连*/
(hbitmap);
/*拷贝位图到屏幕*/
BitBlt(10,10,width,height,&dc,0,0,SRCCOPY);
/*拷贝图象并调整显示大小*/StrwtchBlt(10,10,Rwidth,Rheight,&dc,width,height,SRCCOPY)
;
实际上,由 BMP 图象文件格式可以很方便地从文件中读出各部
分信息,在获得调色板和图象数据后,利用 SetDIBitsToDevice 函
数或 StrechDIBits 函数来显示图象或打印图象。
2.颜色表的修改
模型
RGB 模式是基于自然界中 3 种基色光的混合原理,将 R、G、B
三种基色按照从 0(黑)到 255(白色)的亮度值在每个色阶中分配,
从而指定其色彩,当不同亮度的基色混合后共产生=6 种颜色。在理
想条件下,加色原理 R+G=Y,R+B=M,G+B=C。当 3 种基色的亮度值相
等时,产生灰色,当 3 种亮度值都是 255 时,产生纯白色;而当所
有亮度值都是 0 时,产生纯黑色。当 3 种色光混合生成的颜色一般
比原来的颜色亮度值高,所以 RGB 模式产生颜色的方法又被称为加
色混合。
颜色表的修改
一幅图像有众多的事物,为了按照人们的意愿,传达某种信息,
突出自己最想表达的信息,可以用色彩来完成!那么,在我们的图
像中如何完成这样的任务呢?256 色的 BMP 格式的图像是有颜色表的。颜色表分 R,G,B 三