UGL之颜色处理

2021-11-04 10:28:48 浏览数 (1)

计算机里通常使用RGB色彩模式,例如RGB565,就是用两个字节表示一个像素的颜色,其中红绿蓝分别用5、6、5个bit。还有一些RGB555、RGB666、ARGB4444之类的。而所谓的真彩色,使用4个字节表示一个像素,通常是RGB888,或者ARGB8888,其中A的全称是Alpha通道,指的是透明度

WindML5的显卡驱动基本都已经支持RGB888的真彩色

用WindML语句把光的三原色、颜色的三原色,以及黑白色都画出来,效果如下

再多画几个

RGB888一共可以表示256*256*256=16777216种颜色,这基本得用两个4K的屏才能显示完整,而且也超过了人眼能区分的颜色数量。不过,只把RGB两两混合的画出来,还是比较容易的

而Windows的"画图"中,除了RGB,还有一种ESL模式

这个ESL与HSL/HSB含义差不多,而与RGB之间也仅是一个简单的转换关系。写个函数很容易实现它们之间的转换

代码语言:javascript复制
Red             红色值 
Green           绿色值 
Blue            蓝色值 

HSL/ESL
H/E: Hue        色相    0 - 239
S:   Saturation 饱和度  0 - 240
L:   Lightness  明度    0 - 240

HSB/HSV
H:   Hue        色相
S:   Saturation 饱和度
B:   Brightness 亮度
V:   Value      值(代表深浅)

Contrast        对比度

Brightness      亮度 
Lightness       明度 
Luminance       发光度

Brightness      主观上感知光的强弱
Lightness       目标与周边物体的明亮对比,即主观上明度的强弱
Luminance       客观测量发光体的亮度

既然有了RGB到ESL的转换,那很容易就可以实现调整饱和度和亮度的函数了

例如下面的右图是将左图的ESL中的饱和度调整为最大,颜色显得更鲜艳

饱和度调到最小,就是灰度图了

而如果改为调整左图中ESL的亮度呢?提高亮度就是所有颜色都明亮一些。最大值,就是纯白色了

降低亮度,就是所有颜色暗一些。最暗,就是纯黑色了

另外还有一个对比度。这个概念,貌似还没有什么标准。基本规则是: 提高对比度,就是让亮的更亮,暗的更暗

降低对比度,就是所有颜色的RGB值向中间靠拢

有点意思

我是泰山,专注VX 17年! 一起学习,共同进步!

0 人点赞