如何转换指定 波长 到 RGB 颜色?
//指定波长转换成RGBA颜色
std::vector<int> lambdaToColor(double lambda,double gamma = 0.8,double intensityMax = 255.0)
{
double r, g, b, alpha;
if (lambda >= 380.0 && lambda < 440.0) {
r = -1.0 * (lambda - 440.0) / (440.0 - 380.0);
g = 0.0;
b = 1.0;
}else if (lambda >= 440.0 && lambda < 490.0) {
r = 0.0;
g = (lambda - 440.0) / (490.0 - 440.0);
b = 1.0;
}else if (lambda >= 490.0 && lambda < 510.0) {
r = 0.0;
g = 1.0;
b = -1.0 * (lambda - 510.0) / (510.0 - 490.0);
}else if (lambda >= 510.0 && lambda < 580.0) {
r = (lambda - 510.0) / (580.0 - 510.0);
g = 1.0;
b = 0.0;
}else if (lambda >= 580.0 && lambda < 645.0) {
r = 1.0;
g = -1.0 * (lambda - 645.0) / (645.0 - 580.0);
b = 0.0;
}else if (lambda >= 645.0 && lambda <= 780.0) {
r = 1.0;
g = 0.0;
b = 0.0;
}else {
r = 0.0;
g = 0.0;
b = 0.0;
}
//在可见光谱的边缘处强度较低。
if (lambda >= 380.0 && lambda < 420.0) {
alpha = 0.30 + 0.70 * (lambda - 380.0) / (420.0 - 380.0);
}else if (lambda >= 420.0 && lambda < 701.0) {
alpha = 1.0;
}else if (lambda >= 701.0 && lambda < 780.0) {
alpha = 0.30 + 0.70 * (780.0 - lambda) / (780.0 - 700.0);
}else {
alpha = 0.0;
}
//1953年在引入NTSC电视时,计算具有荧光体的监视器的亮度公式如下
int Y = static_cast<int>(0.212671*r + 0.715160*g + 0.072169*b);
//伽马射线 gamma
//照明强度 intensityMax
int R = r == 0.0 ? 0 : static_cast<int>(std::round(intensityMax * std::pow(r * alpha, gamma)));
int G = g == 0.0 ? 0 : static_cast<int>(std::round(intensityMax * std::pow(g * alpha, gamma)));
int B = b == 0.0 ? 0 : static_cast<int>(std::round(intensityMax * std::pow(b * alpha, gamma)));
int A = static_cast<int>(alpha);
return std::vector<int>{R, G, B, A, Y};
}
如何转换指定 波长 到 RGB 颜色?的更多相关文章
- iOS中RGB颜色转换
iOS中RGB常用的色值,同时可将对颜色的设置定义成宏,方便开发应用,如: // RGB颜色转换(16进制->10进制) #define UIColorFromRGB(rgbValue) [UI ...
- 如何将24位RGB颜色转换16位RGB颜色
有许多朋友第一次使用16位彩色显示屏会遇到如何将24位RGB颜色转换为对应的16位RGB颜色的问题, 通过查阅相关资料,就写一下其中的转换原理吧,希望对大家会有所帮助. 我们知道24位RGB是分别由8 ...
- Sass函数--颜色函数--RGB颜色函数
RGB颜色函数-RGB()颜色函数 主要分为 RGB , HSL 和 Opacity 三大函数,当然其还包括一些其他的颜色函数,比如说 adjust-color 和 change-color 等.1. ...
- PHP将CMYK颜色值和RGB颜色相互转换的例子
PHP将CMYK颜色值和RGB颜色相互转换的例子 function hex2rgb($hex) { $color = str_replace('#','',$hex); $rgb = array('r ...
- RGB颜色核对的网址
http://www.917118.com/tool/color_3.html 首页 人民币大写转换 颜色总览 颜色中文名称对照表 CMYK颜色对照表 RGB颜色对照表 色阶板 颜色代码表 调色板 ...
- 基于OpenCV的火焰检测(二)——RGB颜色判据
上文跟大家分享了在做火焰检测中常用到的图像预处理方法,从这一篇博文开始,我将向大家介绍如何一步一步地检测出火焰区域.火焰提取要用 到很多判据,今天我要向大家介绍的是最简单的但是很有效的判据--RGB判 ...
- RGB颜色 三者都是0为黑色而255是白色 解释
问题: RGB颜色 都是0为黑色而255是白色 与日常生活的黑色白色差距怎么那么大,(与物理学中的黑色吸收光是否相悖)而且为什么要这样定义呢? 链接:https://www.zhihu.com/que ...
- sass-RGB颜色函数-RGB()颜色函数
在 Sass 的官方文档中,列出了 Sass 的颜色函数清单,从大的方面主要分为 RGB , HSL 和 Opacity 三大函数,当然其还包括一些其他的颜色函数,比如说 adjust-color 和 ...
- RGB颜色中的参数是变量的时候,为什么要加上两个+号在左右?
<script> function draw(){ var c=document.getElementById("mycanvas"); var cxt=c.getCo ...
随机推荐
- Android实现蓝牙耳机连接
代码地址如下:http://www.demodashi.com/demo/13259.html 前言 讲讲android对于蓝牙耳机连接技术的实现 今天涉及的内容有: 流程讲解 新建广播Bluetoo ...
- Swift 泛型參数
原文:http://www.cocoachina.com/newbie/basic/2014/0612/8802.html 本页内容包含:泛型形參语句和泛型实參语句 本节涉及泛型类型.泛型函数以及泛型 ...
- 安装SDK后打开安卓project后有例如以下错误:发现了以元素 'd:skin' 开头的无效内容。此处不应含有子元素。
Error: Error parsing D:\Program Files\SDK\android-sdk-windows\system-images\android-22\android-wear\ ...
- vue 父子组件属性传递
父子组件属性传递 注意:0.谁被引用,谁就算子组件 1.属性命名最好完全小写,否则需要如下格式转换:myAttr == my-attr 2.引入的vue组件后必须通过 components 注册才能 ...
- PCIE博文链接
http://blog.csdn.net/mao0514/article/category/1518607/1
- 在Jboss中使用Quartz
Jboss EJB默认使用的定时服务是TimerService,TimerService的使用过程较为繁琐,需要使用一个无状态的serviceBean去实现scheduleTimer, timeout ...
- mysql bin-log三种模式
MySQL的bin-log日志备份有三种模式,分别是:ROW.Statement.Mixed 一.Row 日志会记录成每一行数据被修改成的形式,然后再slave端再对相同的数据进行修改,只记录要修改的 ...
- c++ why doesn't c++ allow rebinding a reference ?
http://stackoverflow.com/questions/27037744/why-doesnt-c-allow-rebinding-a-reference# 1. The primary ...
- java继承机制
1 继承 关键字:extends java没有多重继承 实例 父类: package unit4; public class Base { public int publicVarofBase= ...
- Android WebView 常见问题
1.为WebView自定义错误显示界面: /** * 显示自定义错误提示页面,用一个View覆盖在WebView */ protected void showErrorPage() { LinearL ...