好的,所以我想要一个逐行浏览图片的程序,并在红色值(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来创建日落效果。有人可以通过一种方式来帮助我,让我的日落能受到影响吗?
答案 0 :(得分:1)
要获得日落效果,您需要做的不仅仅是添加一些红色。赔率很高你还需要去掉一些绿色和蓝色。这些清除可能是按比例清除,留下原始颜色的百分比。最灵活的技术是使用一个或多个颜色矩阵。这样,您可以根据输入颜色的线性组合独立调整每种输出颜色。通常,您包含A颜色,这意味着大多数颜色矩阵是4x5,第五个元素是一个常数,无论输入如何都会加或减。
A code example is here,根据您对保真度的需求,您可以根据需要多次调整变换矩阵,直到获得您正在寻找的视觉效果。
答案 1 :(得分:1)
如果可以,将图像加载到Gimp或Photoshop等绘图程序中,并使用它来编辑和预览颜色更改。获得所需外观后,请使用您到达的RGB百分比,这将是您的运行时更改。
我建议使用乘数而不是加法,我建议不要将你的红色提升到1.0以上,但要遵循Edwin Buck关于将绿色和蓝色相乘的想法。