gpt4 book ai didi

delphi - 如何从 TColor 和强度创建屏幕图像(在 Delphi 中)

转载 作者:行者123 更新时间:2023-12-03 15:02:04 27 4
gpt4 key购买 nike

我有一个波长(x 轴)和强度(y 轴,采用可以具有不同范围的任意单位的(光谱剖面)数据集...)

我想将此数字数据转换为图形 View ,如下图底部所示。

但是,我从未在 Delphi (2010) 中使用 Canvas、TImage、位图或任何将其显示到屏幕上的方式做过任何事情。

(显然,如果我可以将数据转换为一行图像像素,那么我只需根据所需的图像高度复制该行多次即可。)

任何人都可以为我指出正确的方向或提供遍历 x,y 值以创建彩色图像的示例代码吗?我希望我的解决方案能够让我(或用户)调整级别(对比度、亮度)。

提前致谢。

alt text

相关SO帖子:Algorithm to convert any positive integer to an RGB value

Convert light frequency to RGB?

最佳答案

嗯,在我看来,你的波长是色调,而你的强度是亮度的另一种说法。如果您有a model that represents colors in terms of hue and brightness,获得正确的颜色将是一项非常简单的任务。以及一种在它和 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。

关于delphi - 如何从 TColor 和强度创建屏幕图像(在 Delphi 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3710485/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com