sRGB和scRGB的区别

.net FrameWork 3.0 后,我们会发现有两个Color数据结构。
一个是:System.Drawing.Color
一个是:System.Windows.Media.Color

这两个结构有啥区别呢?

下面是对这两个类的属性的一个简单比较:

  System.Drawing.Color Structure System.Windows.Media.Color Structure
所在组件 System.Drawing.dll PresentationCore.dll
支持的版本

.NET Framework
Supported in: 3.5, 3.0 SP1, 3.0, 2.0 SP1, 2.0, 1.1, 1.0

.NET Compact Framework
Supported in: 3.5, 2.0, 1.0

XNA Framework
Supported in: 1.0

.NET Framework
Supported in: 3.5, 3.0 SP1, 3.0

A Gets the alpha component value of this Color structure. Gets or sets the sRGB alpha channel value of the color.
B Gets the blue component value of this Color structure. Gets or sets the sRGB blue channel value of the color.
G Gets the green component value of this Color structure. Gets or sets the sRGB green channel value of the color.
R Gets the red component value of this Color structure. Gets or sets the sRGB red channel value of the color.
ScA 不支持 Gets or sets the ScRGB alpha channel value of the color.
ScB 不支持 Gets or sets the ScRGB blue channel value of the color.
ScG 不支持 Gets or sets the ScRGB green channel value of the color.
ScR 不支持 Gets or sets the ScRGB red channel value of the color.
获得系统支持的一些颜色 在Color中定义了141种系统预定义的颜色
调用方法如下:
System.Drawing.Color.AliceBlue
不在Color中定义,而是Colors中定义,获得方法类似下面写法:
System.Windows.Media.Colors.AliceBlue
系统一共预定义了141个颜色。
小结 只支持 sRGB。向下兼容 同时支持 sRGB、ScRGB。不兼容3.0以下的版本

我们可以在上面看到,关键是sRGB和ScRGB两种颜色表示方法。这两种有啥差别呢?我们来看下面三副图,先来感性的看看:

这幅图的巧妙之外在于它通过“归一化”,用两维平面来表示三个数据。X轴是红色的比例,Y轴是绿色的比例,而Z轴是蓝色的比例,虽然Z轴没有画出来,但它的比例数据可以很方便地计算出来。比方红是0.2,绿是0.3,那么蓝就是0.5。因为它们三者加起来必须等于1,不然怎么叫“归一化”呢!图上任何一点的蓝色分量,你都可以用这个方法计算出来。

图中的“舌形”色域空间,是人眼能够辨别的色彩空间,它的边缘围绕一道从波长从380到700(毫微米)的光谱,中间就是用红、绿、蓝三种颜色按不同比例调配出来的颜色。

而图中的三角的区域,是 sRGB 可以表示的颜色范围。显然有一些我们人类可以看到的颜色,但是sRGB来描述的。

上面这幅图对比了 sRGB、人眼、ScRGB 可以表示的颜色范围。

上面这幅图是sRGB和ScRGB两幅图的比较,注意看放大了的云彩。

sRGB 和 scRGB 的转换 

在 System.Windows.Media.Color 结构中,scRGB原色其实是被储存成单精度(single-precision)的浮点数。想要容纳scRGB颜色空间,Color 结构包含四个主要的property,类型都是float,分别为ScA、ScR、ScG、ScB。
这些property和A、R、G、B property 会相互影响,改编G property也会造成ScG property的改变,反之亦然。

当G property 为0,ScG property 也会为0;当G property 为255,ScG property 就会为1。在这个范围之内,
关系并非是线性的,如下表所示。

scG G
<= 0 0
0.1 89
0.2 124
0.3 149
0.4 170
0.5 188
0.6 203
0.7 218
0.8 231
0.9 243
>=1.0 255

ScR 与 R 之间的关系,ScB与B之间的关系,以及ScG与G之间的关系,也都是一样的。ScG的值可以小于0或者大于1,以容纳超出显示器和sRGB数字范围的颜色。

sRGB和scRGB的比较

sRGB目标是使同一网页在不同计算机上显示时的色彩更一致,但只适用于CRT显示器。微软HD Photo项目负责人克劳说,sRGB的挑战在于它只是完整色彩空间的一个子集,当使用sRGB编码时,我们会丢掉一些色彩。

scRGB色彩空间是sRGB扩展,对于黑色和纯绿色而言,这二者没有任何分别。二者的差别就在于scRGB能够显示人眼无法分辨的颜色,其精细程度也超过了sRGB。

scRGB描述每个点所需要的位数是sRGB 2倍,甚至是4倍。不仅能够使用整数,还能够使用浮点数,提高图像的精细程度。

参考资料:

关于scRGB色彩空间
http://hi.baidu.com/cybo/blog/item/8f24ba38bbb584c1d5622597.html

第二章 基本的Brush画刷类 [App = Code + Markup]
http://www.cnblogs.com/rickiedu/archive/2007/04/04/699529.html

GDI+与WPF中的颜色简析
http://blog.csdn.net/johnsuna/archive/2007/08/27/1761061.aspx

简述WPF中的图像像素格式(PixelFormats)
http://blog.csdn.net/johnsuna/archive/2007/08/28/1762901.aspx

你可能感兴趣的:(数据结构,.net,WPF,colors,structure,GDI+)