Rob*_*ank 6 delphi graphics colors
我有一个(光谱分布)的数据集波长(x轴)和强度(y轴,以任意单位,其可具有不同的范围...)
我想将此数字数据转换为图形视图,如下图所示.
但是,我从来没有用帆布的,TImages,位图,或任何方式,我会得到这个屏幕做过任何德尔福(2010年).
(显然,如果我可以把数据转换成图像像素的一行,我后来干脆作为根据需要多次为我所需的图像高度复制该行.)
任何人都可以指出我正确的方向或提供遍历x,y值的样本代码,创建彩色图像?我希望我的解决方案能让我(或用户)调整水平(对比度,亮度).
提前致谢.

相关SO帖子:将任何正整数转换为RGB值的算法
嗯,在我看来,你的波长就是色调,而你的强度就是亮度的另一种说法。如果您有一个用色调和亮度表示颜色的模型以及在它和 RGB 之间进行转换的方法,那么获得正确的颜色将是一项非常简单的任务...:-)
显示颜色实际上非常简单。您可以在表单上使用标准 TImage 组件。一旦计算出某个位置的 TColor 值,您可以使用
image.Canvas.Pixels[x, y] := aColor;
编辑:如何将波长映射到色调:
这有点棘手,因为光谱的左侧似乎是紫色,右侧是红色。在 HSL 中,红色位于 0 位置。您必须反转 X 轴,因此红色为 0,紫色为高。你可以通过基本上说value := MAX_VALUE - value;
然后你需要校准线路。将全红色对应的波长设置为 0,将远蓝色端设置为其对应的色调。(如果您可以将波长转换为 TColor,然后将 TColor 转换为 HSL,那么计算起来应该不难。)这就是您的范围,您需要标准化所有波长以适应该范围。
目测一下,在我看来,示例光谱的左端在色轮上的色调约为 270 度,相当于 0--255 范围内的 192。因此,将光谱从红色变为蓝色——再次记住,红色是低值,而不是高值——并将其标准化到范围 0--192(或任何实际的高值),这样你就得到了 H 值。
另外,如果您的颜色线右端有一些颜色超出全红色而稍微偏向紫色,那么您将得到负色调,该色调会回绕到 255。