三原色光模式(RGB color model),又称RGB颜色模型或红绿蓝颜色模型,是一种加色模型,将红(Red)、绿(Green)、蓝(Blue)三原色的色光以不同的比例相加,以合成产生各种色彩光。

这里所说的加色模型,是区别与早期摄影(冲晒照片)的减色模型

为什么是红绿蓝

三原色的原理不是出于物理原因,而是由于生理原因造成的。人的眼睛内有几种辨别颜色的锥形感光细胞,到的刺激略大于辨别绿色的细胞,人的感觉是黄色;如果辨别黄绿色的细胞受到的刺激大大高于辨别绿色的细胞,人的感觉是红色。虽然三种细胞并不是分别对红色、绿色和蓝色最敏感,但这三种光可以分别对三种锥形细胞产生刺激。

既然“三原色的原理不是出于物理原因,而是由于生理原因造成的”,那么前段所说的“用三种原色的光以不同的比例加和到一起,形成各种颜色的光”显然就不大合适。使用三原色并不足以重现所有的色彩,准确地说法应该是“将三原色光以不同的比例复合后,对人的眼睛可以形成与各种频率的可见光等效的色觉。”只有那些在三原色的色度所定义的颜色三角内的颜色,才可以利用三原色的光以非负量相加混合得到。
例如,红光与绿光按某种比例复合,对三种锥状细胞刺激后产生的色觉可与眼睛对单纯的黄光的色觉等效。但决不能认为红光与绿光按某种比例复合后生成黄光,或黄光是由红光和绿光复合而成的。

为什么RGB都是256个值

红绿蓝的三原色光显示技术广泛用于电视和计算机的显示器,利用红、绿、蓝三原色作为子像素组成的真色彩的像素,透过眼睛及大脑的模糊化,“人类看到”不存在于显示器上的感知色彩。最常见的有阴极射线管显示屏、LED显示屏、液晶显示屏和等离子显示屏等。三种原色光在每一象素中以0-255 (28)强度组合成从全黑色到全白色之间各种不同的颜色光,当前在计算机硬件中采取每一象素用24比特(比特)表示的方法,所以三种原色光各分到8比特,每一种原色的强度依照8比特的最高值28分为256个值。用这种方法可以组合16777216种颜色。最新的显卡、显示屏及软件,已可支持到 210 , 即可以产生出 1073741824种颜色。

什么是Gamma校正

为图像进行伽马编码的目的是用来对人类视觉的特性进行补偿,从而根据人类对光线或者黑白的感知,最大化地利用表示黑白的数据位或带宽。在通常的照明(既不是漆黑一片,也不是令人目眩的明亮)的情况下,人类的视觉大体有伽马或者是幂函数的性质。如果不将图像进行伽马编码,那么数据位或者带宽的利用就会分布不均匀——会有过多的数据位或者带宽用来表示人类根本无法察觉到的差异,而用于表示人类非常敏感的视觉感知范围的数据位或者带宽又会不足。图像的伽马编码并不是必须的(甚至有的时候会适得其反),浮点数格式的颜色值已经提供了一部分对数曲线的线性估计。

由于gamma校正,在计算机显示设备上的颜色输出的强度通常不是直接正比于在图象文件中R, G和B值。就是说,即使值0.5非常接近于0到1.0(完全强度)的一半,计算机显示器在显示 (0.5, 0.5, 0.5)时候的光强度通常(在标准2.2-gamma CRT/LCD上)是在显示 (1.0, 1.0, 1.0)时候的大约22%,而不是50%

显示模式

24比特模式

每像素24位(比特s per pixel,bpp)编码的RGB值:使用三个8位无符号整数(0到255)表示红色、绿色和蓝色的强度。这是当前主流的标准表示方法,用于真彩色和JPEG或者TIFF等图像文件格式里的通用颜色交换。它可以产生一千六百万种颜色组合,对人类的眼睛来说,其中有许多颜色已经是无法确切的分辨。
下图展示了24 bpp的RGB立方体的三个“完全饱和”面,它们被展开到平面上:

关于C语言中的RGB函数调用原理相关推荐

  1. 参数在c语言中,C语言函数调用和参数传递

    C语言函数被定义以后可以被多次调用,调用的时候可以向它传递参数. C语言函数调用 函数的调用指的就是函数的使用方法. 在程序中使用已经定义的函数,可以使用函数调用表达式,其一般格式如下: 函数名(实参 ...

  2. c语言其他函数调用main函数,C语言中的main函数以及main函数是如何被调用的

    main函数是C语言中比较特殊的函数,C程序总是从main函数开始执行,main函数的原型是: int main(int argc, char *argv[]); 其中argc是命令行参数的个数,ar ...

  3. c语言中open的原理,C语言中open函数

    语法Open ( windowvar, windowtype {, parent } ) 参数windowvar:指定窗口变量名,Open()函数把打开窗口的引用放置到该变量中windowtype:s ...

  4. C语言中的static 详细分析

    google了近三页的关于C语言中static的内容,发现可用的信息很少,要么长篇大论不知所云要么在关键之处几个字略过,对于想挖掘底层原理的初学者来说参考性不是很大.所以,我这篇博文博采众家之长,把互 ...

  5. C语言中static详细分析

    google了近三页的关于C语言中static的内容,发现可用的信息很少,要么长篇大论不知所云要么在关键之处几个字略过,对于想挖掘底层原理的初学者来说参考性不是很大.所以,我这篇博文博采众家之长,把互 ...

  6. C语言中的static 详细分析 2014-10-11 15:15 143人阅读 评论(0) 收藏...

    转自:http://blog.csdn.net/keyeagle/article/details/6708077 看到这篇文章针对C语言的static关键字解释的比较好,这里转载过来.谢谢原作者分享. ...

  7. C语言中的static 具体分析

    google了近三页的关于C语言中static的内容,发现可用的信息非常少,要么长篇大论不知所云要么在关键之处几个字略过,对于想挖掘底层原理的刚開始学习的人来说參考性不是非常大.所以,我这篇博文博採众 ...

  8. C语言中static变量详解

    google了近三页的关于C语言中static的内容,发现可用的信息很少,要么长篇大论不知所云要么在关键之处几个字略过,对于想挖掘底层原理的初学者来说参考性不是很大.所以,我这篇博文博采众家之长,把互 ...

  9. c语言中堆,栈,数组的增长方向

    c语言中堆,栈,数组的增长方向这个问题在C语言中是个重点问题,也是个难点问题,接下来我们谈谈他们在内存中的增长问题: 如何判断栈的增长方向? 对于一个用惯了i386系列机器的人来说,这似乎是一个无聊的 ...

最新文章

  1. 经典排序算法python回顾之一 交换排序
  2. yii2 mysql like_Yii2实现跨mysql数据库关联查询排序功能
  3. 数据中台(四)数栈,企业级一站式数据中台PaaS
  4. T-SQL查询高级—SQL Server索引中的碎片和填充因子
  5. uCOS中任务调度时的上下文切换
  6. idea springBoot 配置devtools实现热部署
  7. Java高质量代码之 — 泛型与反射
  8. win10 设置游戏全屏
  9. 注解@RequestParam【不添加默认项注解】与@RequestBody的使用场景
  10. [Asp.net 5] DependencyInjection项目代码分析-目录
  11. eva每一集片尾曲是谁唱的_求EVA新世纪福音战士的主题曲和片尾曲名字!!
  12. http调用如何返回回调函数_Simulink(模型amp;函数调用发生模块)+Guide自写简单系统(五)+StateflowChart回调函数 (二)...
  13. 事件类型-UI事件、焦点事件
  14. Julia : 如何一行实现99乘法表?
  15. android异步任务框架,详解Android App中的AsyncTask异步任务执行方式
  16. 山东大学往年c语言期末试题及答案,山东大学历年C语言题库.pdf
  17. 区块链“搅局”中介风云
  18. 手机不能连接本地服务器进行调试的解决办法(Localhost:8080)
  19. Syntactic sugar Syntactic salt
  20. Qt程序移植到ARM

热门文章

  1. VB.NET MethodInfo使用方法
  2. springBoot整合beetlsql
  3. 次世代主机游戏战争打响,5G时代下索尼微软任天堂该何去何从?
  4. java开发最少知识原则
  5. 不要错过!腾讯强推Redis天花板级别之路成长手册!直接五篇齐飞!!
  6. 基于element-ui一步步封装查询组件
  7. 【实用篇】Python 编码风格与规范
  8. 伪静态与重定向--RewriteRule解释的比较清楚
  9. 【引用】.htaccess RewriteRule详解
  10. 修改其他输入法为android 默认输入法