Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何通过代码在位图上应用从蓝色到黄色的渐变,亮度作为因素_Java_C++_Image Processing_Colors_Gradient - Fatal编程技术网

Java 如何通过代码在位图上应用从蓝色到黄色的渐变,亮度作为因素

Java 如何通过代码在位图上应用从蓝色到黄色的渐变,亮度作为因素,java,c++,image-processing,colors,gradient,Java,C++,Image Processing,Colors,Gradient,我需要对位图应用从蓝色到黄色的渐变。 这里的因素是亮度。 照片的暗区必须是蓝色,最亮的区域必须是黄色。 因此,需要将每个像素的亮度作为一个因素 有人能帮助我如何在C++或java中实现这一点吗? 输入是原始照片的rgb整数值数组。听起来有点像家庭作业问题,但这里是总体思路,或者至少是我将如何做 对于每个像素,计算平均亮度,因此将RG和B相加,然后除以3得到结果(此处需要使用大于8位的变量!) 现在,您有一个返回到0-255范围内的值,指示像素的亮度(有多种方法可以计算亮度,但现在就可以了) 全蓝

我需要对位图应用从蓝色到黄色的渐变。 这里的因素是亮度。 照片的暗区必须是蓝色,最亮的区域必须是黄色。 因此,需要将每个像素的亮度作为一个因素

有人能帮助我如何在C++或java中实现这一点吗?
输入是原始照片的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倍,因为我只将亮度设置为一半,另一半将从黄色平滑设置为红色。这个答案可以投票。我还没有足够的声誉:)。