首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从TColors和强度创建屏幕图像(在Delphi中)

如何从TColors和强度创建屏幕图像(在Delphi中)
EN

Stack Overflow用户
提问于 2010-09-14 23:43:28
回答 2查看 701关注 0票数 6

我有一个波长(x轴)和强度(y轴,可以有不同范围的任意单位)的(光谱分析)数据集。

我希望将此数字数据转换为图形视图,如下图底部所示。

但是,我从来没有在Delphi (2010)中用画布、TImages、位图或任何我想要将其显示在屏幕上的方式做过任何事情。

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

有没有人可以给我指出正确的方向,或者提供遍历x,y值,创建彩色图像的示例代码?我希望我的解决方案将允许我(或用户)调整级别(对比度,亮度)。

提前谢谢。

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

Convert light frequency to RGB?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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。

票数 2
EN

Stack Overflow用户

发布于 2010-09-15 02:46:00

在efg提供的Delphi library中,您恰好拥有所需的内容。

但你真的应该先读一读关于可见光光谱的文章:Spectra

“此程序的目的是将RGB颜色显示为可见光(380到780 nm)波长的函数。”

您需要添加的唯一修改是对强度进行调整。但正如Mason建议的那样,通过HSI表示可以很容易地调整强度:因此,一个快速的解决方案是,一旦您从波长获得RGB,将其转换为HSI,然后调整i,然后再转换回RGB。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3710485

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档