我正在研究由HTML表组成的热图。该表包含n个单元格,并具有最小值和最大值(最高值始终高于最低值)。每个单元格都有一个单元格值。所有这些值都是整数。
值最低的单元格应为浅蓝色,缩放到最高值的单元格为深红色的点。请参见下面的渐变以获得理想范围:
为了计算每个单元格的十六进制颜色值,我查看了表格中的最低和最高值以及该单元格的总值,并将它们传递到一种返回RGB十六进制的方法中,该方法可以与HTML的背景颜色样式一起使用。
到目前为止,这是方法:
public string ConvertTotalToRgb(int low, int high, int cell)
{
int range = high - low;
int main = 255 * cell/ range;
string hexR = main.ToString("X2");
int flip = 255 * (1 - (cell/ range));
string hexB = flip.ToString("X2");
return hexR + "00" + hexB;
}
最低值为0,最高值为235,此方法将返回下表(单元格值在单元格中)。
示例情况:如果最低为20,最高为400,单元为60,我希望该方法返回沿渐变方式大约15.8%的颜色的RGB十六进制。
400 - 20 = 380
380 / 60 = 6.33
100 / 6.33 = 15.8
我知道这个公式不太准确,但这就是我在这里寻求帮助的部分原因。
我到目前为止已经做到了,但是我真的不确定如何进行。任何帮助深表感谢!
最佳答案
您真正想要的是HSV颜色,因为色相(H值)是周期性的。如果色相介于0到1之间,则表示您希望沿着颜色渐变的距离。在这种情况下,饱和度和值分量始终为1。
在此处遵循HSV到RGB的转换代码:
HSV to RGB Stops at yellow C#
public string ConvertTotalToRgb(int low, int high, int cell)
{
int range = high - low;
float h= cell/ (float)range;
rgb = HSVtoRGB(h,1.0f,1.0f);
return "#" + rgb.R.ToString("X2") + rgb.G.ToString("X2") + rgb.B.ToString("X2");
}
如果您知道可以定位支持它的浏览器(CSS3),则可以直接呈现hsv值。
关于c# - 计算热图颜色,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17821828/