Java 如何通过代码在位图上应用从蓝色到黄色的渐变,亮度作为因素
我需要对位图应用从蓝色到黄色的渐变。 这里的因素是亮度。 照片的暗区必须是蓝色,最亮的区域必须是黄色。 因此,需要将每个像素的亮度作为一个因素 有人能帮助我如何在C++或java中实现这一点吗?Java 如何通过代码在位图上应用从蓝色到黄色的渐变,亮度作为因素,java,c++,image-processing,colors,gradient,Java,C++,Image Processing,Colors,Gradient,我需要对位图应用从蓝色到黄色的渐变。 这里的因素是亮度。 照片的暗区必须是蓝色,最亮的区域必须是黄色。 因此,需要将每个像素的亮度作为一个因素 有人能帮助我如何在C++或java中实现这一点吗? 输入是原始照片的rgb整数值数组。听起来有点像家庭作业问题,但这里是总体思路,或者至少是我将如何做 对于每个像素,计算平均亮度,因此将RG和B相加,然后除以3得到结果(此处需要使用大于8位的变量!) 现在,您有一个返回到0-255范围内的值,指示像素的亮度(有多种方法可以计算亮度,但现在就可以了) 全蓝
输入是原始照片的rgb整数值数组。听起来有点像家庭作业问题,但这里是总体思路,或者至少是我将如何做 对于每个像素,计算平均亮度,因此将
R
G
和B
相加,然后除以3得到结果(此处需要使用大于8位的变量!)
现在,您有一个返回到0-255范围内的值,指示像素的亮度(有多种方法可以计算亮度,但现在就可以了)
全蓝色是(0,0255)
,全黄色是(255255,0)
-因此需要在这些值之间进行插值(我们将在此处使用线性插值):
例如,如果您的亮度为50,则为255的20%,因此您需要80%蓝色和20%黄色的颜色。您可以这样计算红色通道的valye:
R = (brightness / max) * (R in Yellow - R in Blue);
对其他通道进行类似的计算,因此对于亮度为50的像素,我们将执行以下操作:
R = (50 / 255) * 255;
G = (50 / 255) * 255;
当然,我们不能有负值,并且使用黄色的B-蓝色的B
idea不会将其用于蓝色通道,您需要反转插值。通过取0.2并从1中减去,我们可以从另一个方向计算0-255的范围:
B = (1 - (50 / 255)) * 255;
额外注释:为了在C++中使用类似的东西,我建议使用SDL,这是一个简单又容易的事情。
< P>如果我正确理解了,下面的(应用到所有像素单独)应该做你想要的:// max_value gives the maximum allowed value for red, green and blue; that is,
// if red, green and blue are all equal to max_value, you have full white)
change_pixel(int& red, int& green, int& blue, int max_value)
{
blue = (red+green+blue)/3;
red = green = (max_value-blue);
}
为什么需要C++或java?这似乎是一种最好的方法,它也可以用于实时图像处理。所以我需要实时调整帧,这不是一个家庭作业问题,真的:)。我正在努力创造一些热视觉效果过滤器。这就是我到目前为止所拥有的。它有三种颜色。从蓝色到黄色,从黄色到红色。黄到红的颜色平滑,但蓝到黄的颜色不平滑:(@user1083398:Yellow to Red更改单个颜色通道(G),但黄到蓝必须同时更改所有三个颜色通道(R、G和B).THX人!这就成功了。Had to将max_值设置为255,并将蓝色乘以2倍,因为我只将亮度设置为一半,另一半将从黄色平滑设置为红色。这个答案可以投票。我还没有足够的声誉:)。