在RGB的“红色”值中添加一定量以创建日落效果,请帮忙。 (Java)的

时间:2011-06-21 17:58:59

标签: java colors rgb pixel

好的,所以我想要一个逐行浏览图片的程序,并在红色值(RGB)上添加一定量以产生日落效果。唯一的问题是,当你得到红色,绿色和蓝色的不同值时,我不能添加,比如50,红色值来获得日落效果。下面的代码只是负责循环行和更改像素值的部分。

for(int y=0; y < sunsetPic.getHeight(); y++)                  
        {
            for(int x = 0; x < sunsetPic.getWidth(); x++)             
            {
                targetPixel = sunsetPic.getPixel(x,y);                 
                pixelColor = targetPixel.getColor();                    

                redValue = pixelColor.getRed();
                greenValue = pixelColor.getGreen();
                blueValue = pixelColor.getBlue();

                pixelColor = new Color(redVlue + 50, greenValue, blueValue);
                targetPixel.setColor(pixelColor);                       
            }
        }

正如您所看到的,我不能只为redValue添加50来创建日落效果。有人可以通过一种方式来帮助我,让我的日落能受到影响吗?

2 个答案:

答案 0 :(得分:1)

要获得日落效果,您需要做的不仅仅是添加一些红色。赔率很高你还需要去掉一些绿色和蓝色。这些清除可能是按比例清除,留下原始颜色的百分比。最灵活的技术是使用一个或多个颜色矩阵。这样,您可以根据输入颜色的线性组合独立调整每种输出颜色。通常,您包含A颜色,这意味着大多数颜色矩阵是4x5,第五个元素是一个常数,无论输入如何都会加或减。

A code example is here,根据您对保真度的需求,您可以根据需要多次调整变换矩阵,直到获得您正在寻找的视觉效果。

答案 1 :(得分:1)

如果可以,将图像加载到Gimp或Photoshop等绘图程序中,并使用它来编辑和预览颜色更改。获得所需外观后,请使用您到达的RGB百分比,这将是您的运行时更改。

我建议使用乘数而不是加法,我建议不要将你的红色提升到1.0以上,但要遵循Edwin Buck关于将绿色和蓝色相乘的想法。