我有一个波长(x轴)和强度(y轴,可以有不同范围的任意单位)的(光谱分析)数据集。
我希望将此数字数据转换为图形视图,如下图底部所示。
但是,我从来没有在Delphi (2010)中用画布、TImages、位图或任何我想要将其显示在屏幕上的方式做过任何事情。
(显然,如果我可以将数据转换为一行图像像素,则只需将该行复制到所需的图像高度所需的次数即可。)
有没有人可以给我指出正确的方向,或者提供遍历x,y值,创建彩色图像的示例代码?我希望我的解决方案将允许我(或用户)调整级别(对比度,亮度)。
提前谢谢。

相关SO帖子:Algorithm to convert any positive integer to an RGB value
发布于 2010-09-15 00:37:52
在我看来,你的波长是色调,而你的强度是亮度的另一种说法。获得正确的颜色将是一个非常简单的任务,只要你有a model that represents colors in terms of hue and brightness和一种在它和RGB之间转换的方法。:-)
显示颜色实际上非常简单。您可以在表单上使用标准TImage组件。一旦计算出某个位置的TColor值,就可以使用
image.Canvas.Pixels[x, y] := aColor;
编辑:如何将波长映射到色调:
这有点棘手,因为你光谱的左边似乎是紫色,而红色在右边。在HSL中,red位于0位置。你必须反转你的X轴,红色是0,紫罗兰是高。你可以通过简单地说value := MAX_VALUE - value;来得到它。
然后你需要校准这条线。将对应于全红的波长设置为0,并将远蓝色端设置为其对应的色调。(如果您可以将波长转换为TColor,然后将TColor转换为HSL,这应该不难计算。)这就是你的范围,你需要对所有的波长进行归一化以适应这个范围。
在我看来,示例光谱的左端在色轮上的色调约为270度,在0-255的范围内相当于192度。所以把你的光谱从红色到蓝色--同样,记住红色是低的,而不是高的--并将它归一化到0-192(或任何实际的最高值),你就得到了H值。
另外,如果你的颜色线的右端有一些颜色从全红变成了一点紫色,那么你就会有一个负色调,它会回绕到255。
发布于 2010-09-15 02:46:00
在efg提供的Delphi library中,您恰好拥有所需的内容。
但你真的应该先读一读关于可见光光谱的文章:Spectra。
“此程序的目的是将RGB颜色显示为可见光(380到780 nm)波长的函数。”
您需要添加的唯一修改是对强度进行调整。但正如Mason建议的那样,通过HSI表示可以很容易地调整强度:因此,一个快速的解决方案是,一旦您从波长获得RGB,将其转换为HSI,然后调整i,然后再转换回RGB。
https://stackoverflow.com/questions/3710485
复制相似问题