Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何渲染彩虹光谱?_C++_Qt - Fatal编程技术网

C++ 如何渲染彩虹光谱?

C++ 如何渲染彩虹光谱?,c++,qt,C++,Qt,我需要以编程方式在矩形图像中生成彩虹光谱的近似值,如下所示: 我知道如何绘制pixmap,我要找的是如何生成颜色值。你需要。真的 除此之外,它所能做的就是在HSL颜色表示中使用QColor::fromHslF(x/*0.8,0.95,0.5)迭代色调,其中x在彩虹上从0.0变化到1.0。这在物理上一点也不准确,但也许可以 否则,您需要一个稍微复杂一些的代码,它非常简单地近似于上面引用的文章 //https://github.com/KubaO/stackoverflown/tree/mast

我需要以编程方式在矩形图像中生成彩虹光谱的近似值,如下所示:

我知道如何绘制pixmap,我要找的是如何生成颜色值。

你需要。真的

除此之外,它所能做的就是在HSL颜色表示中使用
QColor::fromHslF(x/*0.8,0.95,0.5)
迭代色调,其中
x
在彩虹上从0.0变化到1.0。这在物理上一点也不准确,但也许可以

否则,您需要一个稍微复杂一些的代码,它非常简单地近似于上面引用的文章

//https://github.com/KubaO/stackoverflown/tree/master/questions/rainbow-19452530
#包括
#如果QT_版本_专业>4
#包括
#恩迪夫
#包括
#包括
constexpr qreal linMap(qreal x1,qreal x,qreal x2,qreal y1=0,qreal y2=1。){
返回y1+(y1-y2)*(x-x1)/(x1-x2);
}
QColor波长到颜色(qreal lambda){
//基于:http://www.efg2.com/Lab/ScienceAndEngineering/Spectra.htm
//上述内容基于:http://www.midnightkite.com/color.html
结构颜色{
红色=0,绿色=0,蓝色=0。;
QColor toColor(qreal因子)常数{
自动常量映射=[因子](qreal c)->qreal{
constexpr qreal伽马=0.8;
返回功率(c*系数,伽马);
};
返回QColor::fromRgbF(映射(红色)、映射(绿色)、映射(蓝色));
}
};
结构阈值{
开始,结束;
颜色(*颜色)(qreal);
qreal(*因子)(qreal)=nullptr;
};
静态常量std::数组阈值{
//让强度在视觉极限附近下降
阈值{380420,nullptr,[](qrealx){返回0.3+0.7*x;},
阈值{380,440,[](qreal x){返回颜色{1-x,0,1};},
阈值{440490,[](qreal x){返回颜色{0,x,1};},
阈值{490510,[](qrealx){返回颜色{0,1,1-x};},
阈值{510580,[](qrealx){返回颜色{x,1,0};},
阈值{580645,[](qrealx){返回颜色{1,1-x,0};},
阈值{645780,[](qreal){返回颜色{1,0,0};},
阈值{700780,nullptr,[](qrealx){return1-0.7*x;}
};
颜色;
qreal系数=1.0;
用于(自动和thr:阈值){
如果(λ=thr.end)继续;
自动x=linMap(thr.begin、lambda、thr.end);
如果(thr.因子)因子=thr.因子(x);
如果(thr.color)color=thr.color(x);
}
返回颜色。toColor(因子);
}
QPixmap彩虹(int w,int h){
QPixmap-pixmap(w,h);
QPainter p(和pixmap);
constexpr qreal f1=1.0/400,f2=1.0/780;
对于(int x=0;x
QT有QColor类,您可以在其中设置色调并从中获取RGB。请看一下:,它有您需要了解的一切。一旦你完成了一些阅读/学习,如果你被卡住了,回来发布一个特定的编程问题。你真的在问1)如何计算条形图上每个位置的RGB(或HSL、HSV等)值,或者2)如何在给定正确颜色的情况下创建条形图,或者3)这两个问题都被编辑成有趣的内容。投票重新开放。不应该关闭。原始海报指出他/她知道如何绘制位图,但不知道如何计算位图,这表明他/她对问题有部分理解。此外,这对未来的答案寻求者来说是有价值的,因为他们已经拥有比原始海报更深的知识。谢谢你参考那篇论文。这是我读过的关于正确渲染颜色的最清晰、最有用的解释之一。