有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

有人能帮助我如何在C++或java中实现这一点吗? 输入是原始照片的rgb整数值数组


共 (2) 个答案

  1. # 1 楼答案

    听起来有点像一个家庭作业问题,但这里有一个大概的想法,或者至少,我会怎么做

    对于每个像素,计算平均亮度,因此将R{}和B相加,然后除以3得到结果(这里需要使用大于8位的变量!)

    现在,您有一个返回到0-255范围内的值,指示像素的亮度(有多种方法可以计算亮度,但现在就可以了)

    全蓝是(0,0,255),全黄是(255,255,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 in Yellow - B in Blueidea不会对蓝色通道进行切割,需要反转插值。通过取0.2并从1中减去,我们可以从另一个方向计算0-255的范围:

    B = (1 - (50 / 255)) * 255;
    
    <>额外注释:在C++中使用类似的东西,我建议使用SDL,这是一个简单又容易的事情。p>
  2. # 2 楼答案

    如果我理解正确,以下内容(分别应用于所有像素)应满足您的要求:

    // 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);
    }