【发布时间】:2012-01-11 09:04:59
【问题描述】:
我编写了一个方法来为图像应用 3 种颜色的渐变。 颜色是蓝色->黄色->红色。 我正在从黄色到红色的颜色平滑过渡,但如果亮度低于 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++;
}
}
【问题讨论】:
标签: c++ math image-processing filter interpolation