//指定波长转换成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};
}

最新文章

  1. Mysql上手
  2. PHP中判断变量为空的几种方法
  3. css的小技巧
  4. Xcode因为证书问题经常报的那些错
  5. php正则获取网页标题、关键字、网页描述代码
  6. POJ 3258 River Hopscotch (binarysearch)
  7. ZOJ 3810 Pretty Poem 分类: ACM 2015-05-17 14:40 83人阅读 评论(0) 收藏
  8. Android内存泄漏简介
  9. EasyUI combobox 中文无法检索最终解决方案!
  10. Unity 使用xLua遇到的坑
  11. sql基础题目测试及正确答案
  12. UnityShader 表面着色器简单例程集合
  13. Script error.解决方法
  14. 六、文件IO——fcntl 函数 和 ioctl 函数
  15. ORA-01654 : 表空间不足
  16. lua --- __newindex 的使用规则
  17. excel文件使用navicat工具导入mysql的方法
  18. Software-Defined Networking:A Comprehensive Survey--Day1
  19. whoami,who,w命令详解
  20. 武汉Uber优步司机奖励政策(1月11日~1月17日)

热门文章

  1. (三)Maven基本概念——常用插件的配置
  2. iOS开发-自动布局之autoresizingMask使用详解(Storyboard&amp;Code)
  3. 【MyBatis】MyBatis分页插件PageHelper的使用
  4. C语言学习笔记(四) 流程控制
  5. PILE读书笔记_标准I/O
  6. InputArray和OutputArray
  7. java - day14 - InnerClass
  8. 运行cotroller后,查看vuser日志为空
  9. 【EasyUI】Tabs常用操作及href和content的异同
  10. Databinding在自定义ViewGroup中如何绑定view