-
RGB
,三原色光模式(英语:
RGB
color model
)
,又称
RG
B
颜色
模型或红绿蓝颜色模型,
是一种
加色模型,
将红
(
Red
)
、
绿
(
< br>Green
)
、
蓝(
Blue
)三原色的色光以不同的比例相加,
<
/p>
以产生多种多样的色
光。
RGB
颜色模型的主要目的是在电子系统中检测,
表示和显示图像,
比如电视和电脑,但是在传统摄影中也有应用。在电子时代之前,基
于
p>
人类对颜色的感知,
RGB
颜色模型已经有了坚实的理论支撑。
RGB
是一种依
赖于设备的颜色空间:
不同设备对特定
RGB
< br>值的检测和重现
都不一样,因为颜色物
质(荧光剂或者染料)和它们对红、绿和蓝
的单独响应水平随着制造商的不同而
不同,
甚至是同样的设备不同的
时间也不同。
< br>基本简介
概述
RGB
色彩模式(也
翻译为“红绿蓝”,比较少用)是工业界的一种
颜色标准,是通过对红
(R)
、绿
(G)
、蓝
(B)
三个颜色通道的变化以及
它们相
互之间的叠加来得到各式各样的
颜色的,
RGB
即是代表红、
绿、
蓝三个通
道的颜色,
这个标准几乎包括了人类视力所能感知的所
有颜色,
是目前运用最广的颜色系统之一。
RGB
色彩模式使用
RGB
模型为图像中每一个像素的
RGB
分量分配
一个
0~255
范
围内的强度值。例如:纯红色
R
值为
2
55
,
G
值为
0
,
B
值为
0
;灰色的
R
、
G
、
B
三个值相等(除了
0
和
255
)
;白色的
R
、
G
、
B
都为
255
;黑色的
R
、
G
、
B
都为
0
。
RGB
图像只使用三种颜色,就可
以使它们按照不同的比例混合,在屏幕上重现
16777216
种颜色
在
RGB
模式下,每种
RGB
成分都可使用从
0
(黑色)到
255
(白色)
的值。
例如,
亮红色使用
R
值
246
、
G
值
20
和
B
值
50
。
当所有三种成分值相等时,<
/p>
产生灰色阴影。
当所有成分的值均为
255
时,结果是纯白色;当该值为
0
时,结果是纯黑色。
原理:
RGB
是从颜色发光的原理来设计定的,通俗点说它的颜色混合方式就
好像有红、绿、蓝三盏
灯,当它们的光相互叠合的时候,色彩相混,
而亮度却等于两者亮度之总和
(两盏灯的亮度嘛!
)
,
越
混合亮度越高,
即加法混合。
有色光可被无色光冲淡并变亮。
如蓝
色光与白光相遇,
结果是产
生更加明亮的浅蓝色光。
知道它的混合原理后,
在软件中设定颜色就
容易理
解了。
红、绿、蓝三盏灯的叠加情况,中心三色最亮的叠加区为白色,
加法混合的特点:越叠加越明亮。
红、
绿、
蓝
三个颜色通道每种色各分为
255
阶亮度,
在
0
时“灯”
最弱——是关掉的,
而在
255
时“灯”最亮。
当三色数值相同时为无
色彩的灰度色,而三色都为
255
时为最亮的白色,都为
0
时为黑
色。
RGB
颜色称为加成色,
因为您通过将
R
、
G
和
B
添加在一起
(即
所有光线反射回眼
睛)可产生白色。
加成色用于照明光、电视和计
算机显示器。
例如,显示器通过红色、绿色和蓝色
荧光粉发射光线
产生颜色。绝大多数可视光谱都可表示为红、绿、蓝
(RGB)
三色光
在不同比例和强度上的混合。
这些颜色若发生重叠,则产生青、洋
红和黄。
< br>
语法:
( red
,
green
,
blu
e )
参数
red
:
< br>integer
类型,指定颜色中的红色
分量强度,有效
值在
0
到
255
之间
green
:
integer<
/p>
类型,指定颜色
中的绿色分量强度,有效值在
0
到
255
之间
< br>blue
:
integer
类型
,指
定颜色中的蓝色分量强度,有效值在
0
到
255
之间返回值
Long
p>
。函
数执行成功时返回由指定分量确定的颜色,
用长整数表示。
发生错误
时返回
-
1
。如果任何参数的值为
NULL
,<
/p>
RGB()
函数返回
NULL
。
用法
RGB()
函数使用下述公式计算表示颜色的长
整数:
65536 *
Red+ 256 * Green+
Blue
其中,
Blue
代表蓝色分量
,
Green
代表绿色
分量,
Red
代表红色分量。各分量中,数值越小,亮度越低,数值越
大,亮度越高。例
如,
RGB (
0
,
0
,
0 )
为黑色(亮度最低)
,
RGB
( 255
,
255
,
255
)
为白色(亮度最高)
。
GRB
格式:
由于网页
(WEB)
是基于计算机浏览器开发的媒体,所以颜色以光学
颜色
RGB
(红、绿、蓝)为主。
网页颜
色是以
16
进制代码表示,一
般格式为
#ZYZABC
(字母用数字代替
)如黑色是三个颜色为
0
,在
网页代码便是:
#000000
。
当颜色代码为
#AABB11
时,
< br>可以简写为
#AB1
表示,如
#
135
与
#113355
表示同样的颜
色。
各
种
RGB
格式:
RGB1
、
RGB4
、
RGB8
都是调色板类型的
RGB
格式,在描述这些媒体
类型的格
式细节时,通常会在
BITMAPINFOHEADER
数据结
构后面跟着
一个调色板
(定义一系列颜色)
。
它们的图像数据并
不是真正的
颜色
值,而是当前像素颜色值在调色板中的索引。以
RGB1<
/p>
(
2
色位图)为
例,
比如它的调色板中定义的两种颜色值依次为
0x00000
0
(黑色)
和
0xFFFFFF
(白色)
,那么图像数据
< br>?(每个像素用
1
位
表示)表示
对应各像素的颜色为:黑黑白白黑白黑白黑白白白?
¨
RGB565
< br>使用
16
位表示一个像素,这
1
6
位中的
5
位用于
R
,
6
位用于
G
,
5
位用于
B
。程序中通常使用一个字(
WORD
,一个字等于
两个字节)来操作一个像素。当读出一个像素后,这个字的各个位意<
/p>
义如下:
高字节
低字节
R R R R R G G G G G G B B B B B
可以组合使用屏蔽字和移位操作来
得到
RGB
各分量的值:
#define
RGB565_MASK_RED 0xF800
#define RGB565_MASK_GREEN 0x07E0
#define
RGB565_MASK_BLUE 0x001F
R = (wPixel & RGB565_MASK_RED) >>
11
;
//
取值范围
0-31
G = (wPixel &
RGB565_MASK_GREEN) >> 5
;
//
取值范围
0-63
B = wPixel &
RGB565_MASK_BLUE
;
//
取值范围
0-31
#define
RGB(r
,
g
,
b)
(unsigned
int)(
(r/0x08
<<
11)
|
(g/0x08
<< 6) |
b/0x08 )
#define
RGB(r
,
g
,
b)
(unsigned
int)(
(r/0x08
<<
10)
|
(g/0x08
<< 5) |
b/0x08 )
该代码可以解
决
24
位与
16
位相互转换的问题
¨
RGB555
是另一种
16
位的
RGB
格式,<
/p>
RGB
分量都用
5
位表示
(剩
下的
1
< br>位不用)
。使用一个字读出一个像素后,这个字的各个位意义
如下:
高字节
低字节
X R R R R G G G G G B B B B B
(
X
表示不用,可以忽略)
可以组合使用屏蔽字和移位操作来
得到
RGB
各分量的值:
#define
RGB555_MASK_RED 0x7C00
#define RGB555_MASK_GREEN 0x03E0
#define
RGB555_MASK_BLUE 0x001F
R = (wPixel & RGB555_MASK_RED) >>
10
;
//
取值范围
0-31
G = (wPixel &
RGB555_MASK_GREEN) >> 5
;
//
取值范围
0-31
B = wPixel &
RGB555_MASK_BLUE
;
//
取值范围
0-31
¨ RGB24
使用
24
位来表示一个像素,
RGB
分量都用
8
位表示,
取值范围为
p>
0-255
。
注意在内存中
RGB
各分量的排列顺序为:
BGR
BGR
BGR?。通常可以使用
RG
BTRIPLE
数据结构来操作一个像素,它的定
义为:
typedef struct tagRGBTRIPLE {
BYTE
rgbtBlue
;
//
蓝色分量
BYTE rgbtGreen
;
//
绿色分量
BYTE
rgbtRed
;
//
红色分量
} RGBTRIPLE
;
¨ RGB32
< br>使用
32
位来表示一个像素,
R
GB
分量各用去
8
位,剩
下的
8
位用作
Alpha<
/p>
通道或者不用。
(
ARGB32
就是带
Alpha
通道的
RGB32
。
)
注意在内存中
RGB
各分量的排列顺序为:
BGRA
BGRA
BGRA?。
通常可以使用
RGBQUAD
数据结构来操作一个像素,它的定义为:
typedef struct tagRGBQUAD {
BYTE
rgbBlue
;
//
蓝色分量
BYTE rgbGreen
;
//
绿色分量
BYTE rgbRed
;
//
红色分量
BYTE rgbReserved
;
//
保留字节(用作
Alpha
通道
或忽略)
} RGBQUAD
。
主要算法
public void paint(Graphics g)
ect(0
,
0
,
370
,
420)
;
or()
;
ne(100
,
100
,
355
,
100)
;
ne(100
,
100
,
100
,
355)
;
or()
;
al(350
,
95
,
10
,
10)
;
or(a)
;
al(45
,
145
,
10
,
10)
;
or()
;