设为首页 加入收藏

TOP

1.2.4 灰度图像的颜色表
2013-10-07 00:22:28 来源: 作者: 【 】 浏览:62
Tags:1.2.4 图像 颜色

1.2.4  灰度图像的颜色表

如表1-2所示,灰度图像的颜色表是一个256个表项的RGBQUAD结构体数组(具体参看BMP文件结构中对颜色表的描述),而每个RGBQUAD中的R、G、B分量的值是相等的。随着颜色表数组下标从0到255变化,颜色表数组元素中R、G、B分量也从0到255依次变化。灰度图像的位图数据每像素一个字节,其值为0到255之间的一个,当显示一幅灰度图像时,系统根据像素值,到颜色表数组下标与之对应的表项(数组元素)中查看颜色,根据该表项中的颜色显示像素。由于灰度图像颜色表每个表项中R、G、B分量相等,因此只有图像亮度信息,没有颜色信息,因而显示出的灰度图像也就没有颜色了。

表1-2  灰度图像的颜色表

B< xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

G

R

  

0

0

0

不确定

1

1

1

不确定

2

2

2

不确定

3

3

3

不确定

M

M

M

M

254

254

254

不确定

255

255

255

不确定

从以上的解释中我们知道,图像颜色表决定了图像的颜色,如果对灰度图像的颜色表数据进行改变,图像颜色自然也就被改变了。下面的main()函数,把灰度图像颜色表的蓝色分量进行了改变。

 void main()
{
//读入指定BMP文件进内存
char readPath[]="dog.BMP";
readBmp(readPath);
 //输出图像的信息
printf("width=%d,height=%d,biBitCount=%d\n",
bmpWidth,bmpHeight,biBitCount);
 //改变灰度图像的颜色表蓝色分量的值,查看前后变化
if(biBitCount==8){
for(int i=0; i<256;i++){
pColorTable[i].rgbBlue = 255-pColorTable[i].rgbBlue;
}
}
 //将图像数据存盘
char writePath[]="dogcpy.BMP";
saveBmp(writePath, pBmpBuf, bmpWidth,
bmpHeight, biBitCount, pColorTable);
 //清除缓冲区,pBmpBuf和pColorTable是全局变量,
在文件读入时申请的空间
delete []pBmpBuf;
if(biBitCount==8)
delete []pColorTable;
}

改变后灰度图像颜色表变为表1-3的形式(蓝色分量是结构体的第一个分量),此时颜色表R、G、B三个分量的值已经不再相等,因此图像也就具有了颜色信息,只不过此时的颜色并不是物体真实的颜色,读者可以运行程序,查看颜色表改变前后图像颜色的变化。

表1-3  改变后的颜色表

B

G

R

保留位

255

0

0

不确定

254

1

1

不确定

253

2

2

不确定

252

3

3

不确定

M

M

M

M

1

254

254

不确定

0

255

255

不确定

这里需要说明的是,为了说明方便,我们在1.2.3和1.2.4两小节中都重新写了main()函数,这些main()函数均在chap1-1中的bmpReadWrite.cpp文件内。而C语言中,一个程序只能有一个main()函数,读者在调用其中一个main()函数时,需要将其他两个屏蔽掉。

本节内容用简单的C语言、采用结构化的程序设计思想实现了BMP文件的读写及访问操作,这只是我们后面可视化图像编程(www.cppentry.com)的前奏,有了这个基础后,我们来学习MFC库中的GDI位图,并采用面向对象的思想自己设计实现一个图像类(ImgCenterDIB类)。

【责任编辑:夏书 TEL:(010)68476606】

回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇1.2.2 BMP图像文件的读写 下一篇1.1.5 灰度图像和彩色图像

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: