我写了一种方法将三种颜色的渐变应用于图像。 颜色是蓝色 - >黄色 - >红色。 我的颜色从黄色到红色平滑过渡,但如果亮度低于0.5,从蓝色→黄色的过渡是从蓝色到绿色到黄色的颠簸,所以它不是光滑的。 我想对图像具有类似热影像的效果。在图像上应用色彩插值
我不知道我在做什么错,我写了下面的方法。 我计算应用于颜色模板的原始像素的亮度。
public void applyGradient()
{
size = width * height;
float r, g, b;
float redTemp, yellowTemp, blueTemp;
float luminance = 0;
float result;
index = 0;
redTemp = 0xff000000 | (255 << 16) | (0 << 8) | 0;
yellowTemp = 0xff000000 | (255 << 16) | (255 << 8) | 0;
blueTemp = 0xff000000 | (0 << 16) | (0 << 8) | 255;
while(index < size)
{
r = (rgbInput[index]& 0x00FF0000) >> 16;
g = (rgbInput[index]& 0x0000FF00) >> 8;
b = (rgbInput[index]& 0x000000FF);
luminance = ((r+b+g)/3)/255;
if (luminance < 0.5)
{
result = (float) ((yellowTemp * luminance * 2.0) + blueTemp * (0.5 - luminance) * 2.0);
}
else
{
result = (float) (redTemp * (luminance - 0.5) * 2.0 + yellowTemp * (1.0 - luminance) * 2.0);
}
output[index] = (int)result;
index++;
}
}
我发现,如果我使所有变量浮动,然后我得到良好的黄色红色分布,如果亮度> 0.5。但如果它在下面,它需要从蓝色变成黄色,我会从蓝色变成绿色变黄。我如何顺利地从蓝色变为黄色:s。从黄色到红色似乎不成问题。 – LordrAider 2012-01-11 11:39:57
从黄色到红色的计算与从蓝色到黄色的计算不同。尝试:结果=(int)((yellowTemp *(1.0-亮度)* 2.0)+ blueTemp *(0.5-亮度)* 2.0);或者其中的一些变化。 – 2012-01-11 21:43:20
也无法正常工作:(当从黄色变为红色,从蓝色变为黄色时,必须有不同的东西:)。 – LordrAider 2012-01-12 09:26:08