位图和调色板

转载 2007年10月15日 11:54:00

如今Windows(3.x以及9598NT)系列已经成为绝大多数用户使用的操作系统,它比DOS成功的一个重要因素是它可视化的漂亮界面。那么Windows是如何显示图象的呢?这就要谈到位图(bitmap)

我们知道,普通的显示器屏幕是由许许多多点构成的,我们称之为象素。显示时采用扫描的方法:电子枪每次从左到右扫描一行,为每个象素着色,然后从上到下这样扫描若干行,就扫过了一屏。为了防止闪烁,每秒要重复上述过程几十次。例如我们常说的屏幕分辨率为640×480,刷新频率为70Hz,意思是说每行要扫描640个象素,一共有480行,每秒重复扫描屏幕70次。

我们称这种显示器为位映象设备。所谓位映象,就是指一个二维的象素矩阵,而位图就是采用位映象方法显示和存储的图象。举个例子,图1.1是一幅普通的黑白位图,图1.2是被放大后的图,图中每个方格代表了一个象素。我们可以看到:整个骷髅就是由这样一些黑点和白点组成的。

1.1    骷髅

1.2     放大后的骷髅位图

那么,彩色图是怎么回事呢?

我们先来说说三元色RGB概念。

我们知道,自然界中的所有颜色都可以由红、绿、蓝(RGB)组合而成。有的颜色含有红色成分多一些,如深红;有的含有红色成分少一些,如浅红。针对含有红色成分的多少,可以分成0255256个等级,0级表示不含红色成分;255级表示含有100%的红色成分。同样,绿色和蓝色也被分成256级。这种分级概念称为量化。

这样,根据红、绿、蓝各种不同的组合我们就能表示出256×256×256,约1600万种颜色。这么多颜色对于我们人眼来说已经足够丰富了。

1.1     常见颜色的RGB组合值

颜色

R

G

B

255

0

0

0

255

0

绿

0

0

255

255

255

0

255

0

255

0

255

255

255

255

255

0

0

0

128

128

128

你大概已经明白了,当一幅图中每个象素赋予不同的RGB值时,能呈现出五彩缤纷的颜色了,这样就形成了彩色图。的确是这样的,但实际上的做法还有些差别。

让我们来看看下面的例子。

有一个长宽各为200个象素,颜色数为16色的彩色图,每一个象素都用RGB三个分量表示。因为每个分量有256个级别,要用8(bit),即一个字节(byte)来表示,所以每个象素需要用3个字节。整个图象要用200×200×3,约120k字节,可不是一个小数目呀!如果我们用下面的方法,就能省的多。

因为是一个16色图,也就是说这幅图中最多只有16种颜色,我们可以用一个表:表中的每一行记录一种颜色的RGB值。这样当我们表示一个象素的颜色时,只需要指出该颜色是在第几行,即该颜色在表中的索引值。举个例子,如果表的第0行为25500(红色),那么当某个象素为红色时,只需要标明0即可。

让我们再来计算一下:16种状态可以用4(bit)表示,所以一个象素要用半个字节。整个图象要用200×200×0.5,约20k字节,再加上表占用的字节为3×16=48字节.整个占用的字节数约为前面的1/6,省很多吧?

这张RGB的表,就是我们常说的调色板(Palette),另一种叫法是颜色查找表LUT(Look Up Table),似乎更确切一些。Windows位图中便用到了调色板技术。其实不光是Windows位图,许多图象文件格式如pcxtifgif等都用到了。所以很好地掌握调色板的概念是十分有用的。

有一种图,它的颜色数高达256×256×256种,也就是说包含我们上述提到的RGB颜色表示方法中所有的颜色,这种图叫做真彩色图(true color)。真彩色图并不是说一幅图包含了所有的颜色,而是说它具有显示所有颜色的能力,即最多可以包含所有的颜色。表示真彩色图时,每个象素直接用RGB三个分量字节表示,而不采用调色板技术。原因很明显:如果用调色板,表示一个象素也要用24位,这是因为每种颜色的索引要用24(因为总共有224种颜色,即调色板有224),和直接用RGB三个分量表示用的字节数一样,不但没有任何便宜,还要加上一个256×256×256×3个字节的大调色板。所以真彩色图直接用RGB三个分量表示,它又叫做24位色图。

 

关于位图中【调色板】、DDB、DIB的概念

一、调色板 1.我们知道,自然界中的所有颜色都可以由红、绿、蓝(R,G,B)三基色组合而成。而计算机对于像素的处理,用一个字节,将每种基色分为了256种等级,那么红、绿、蓝的不同组合共有256*25...
  • foreverhuylee
  • foreverhuylee
  • 2014年04月02日 17:28
  • 1242

BITMAP位图 调色板

位图和调色板的概念 如今Windows(3.x以及95,98,NT)系列已经成为绝大多数用户使用的操作系统,它比DOS成功的一个重要因素是它可视化的漂亮界面。那么Windows是如何显示图象的呢?这就...
  • K_Linux_Man
  • K_Linux_Man
  • 2015年09月23日 23:17
  • 1349

把24位和32位BMP位图转为灰色bmp位图

源码来自网上,原来只支持24位位图转灰度位图,我增加了32位
  • gergul
  • gergul
  • 2014年07月28日 15:13
  • 1079

位图与调色板bitmap_picture_demo

  • 2004年06月04日 00:00
  • 25KB
  • 下载

位图与调色板

  • 2004年06月04日 00:00
  • 7KB
  • 下载

windows 位图和调色板

  • 2008年10月29日 11:23
  • 60KB
  • 下载

位图与调色板源代bitmap_picture_src.zip

  • 2006年02月23日 09:05
  • 3KB
  • 下载

位图与调色板bmp2rgn_tool

  • 2004年06月04日 00:00
  • 36KB
  • 下载

Windows位图和调色板------上

第1章 Windows位图和调色板 1.1 位图和调色板的概念 如今Windows(3.x以及95,98,NT)系列已经成为绝大多数用户使用的操作系统,它比DOS成功的一个重要因素是它可视化...
  • damenhanter
  • damenhanter
  • 2011年05月03日 23:37
  • 464

MFC画笔\画刷\加载位图\加载外部图片(LoadImage)\调色板\区域绘制、 复杂图像绘制等14.5.6

void CMFCGdiView::OnPen() { CClientDC dc(this); //初始化画笔 CPen Pen(PS_SOLID,10,RGB(0,255,...
  • luoqiang0831
  • luoqiang0831
  • 2014年05月06日 21:50
  • 414
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:位图和调色板
举报原因:
原因补充:

(最多只允许输入30个字)