[英]How to convert image to sepia in java
我正在尝试拍摄图像并使其变成棕褐色。 出于某种原因,即使我从我买来教自己 java 的书中得到了它,代码也不起作用。 是否有我遗漏的东西或在不正确的地方的东西? 我见过的每个问题都有一些我什至不知道的疯狂公式和符号。 有人能帮我吗?
import images.APImage;
import images.Pixel;
public class Sepia{
public static void main(String[] args){
APImage image = new APImage("DogStockPhoto.jpg");
//image.draw();
//converts to grayscale
for(Pixel p: image){
int red = p.getRed();
int green = p.getGreen();
int blue = p.getBlue();
int average = (red + green + blue)/3;
p.setRed(average);
p.setGreen(average);
p.setBlue(average);
//converts to sepia
if(red < 63){
red = (int)(red * 1.1);
blue = (int)(blue * 0.9);
}else if(red < 192){
red = (int)(red * 1.15);
blue = (int)(blue * 0.85);
}else{
red = Math.min((int)(red * 1.08), 255);
blue = (int)(blue * 0.93);
}
}
image.draw();
}
}
另外,在我尝试绘制图像后,它仍然处于灰度状态。
评论是正确的。 您将像素值平均化,使它们变灰。 然后您计算像素的棕褐色值,但永远不会将其分配回像素。 因此,您的图像保持灰度。
在 if...else 块之后:
p.setRed(red);
p.setBlue(blue);
好的! 所以谢谢两位的反馈。 我想出了几件事。 我应该告诉它用新的“红色”和“蓝色”替换灰色。 但是,这并不能在同一个地方工作,这意味着您需要两个用于语句,一个用于灰度,另一个用于棕褐色。 搞清楚之后,一切顺利! 这是我完成的代码:
import images.APImage;
import images.Pixel;
public class Sepia{
public static void main(String[] args){
APImage image = new APImage("DogStockPhoto.jpg");
//image.draw();
//converts to grayscale
for(Pixel p: image){
int red = p.getRed();
int green = p.getGreen();
int blue = p.getBlue();
int average = (red + green + blue)/3;
p.setRed(average);
p.setGreen(average);
p.setBlue(average);
}
//converts to sepia
for(Pixel p: image){
int red = p.getRed();
int blue = p.getBlue();
if(red < 63){
red = (int)(red * 1.1);
blue = (int)(blue * 0.9);
}else if(red < 192){
red = (int)(red * 1.15);
blue = (int)(blue * 0.85);
}else{
red = Math.min((int)(red * 1.08), 255);
blue = (int)(blue * 0.93);
}
p.setRed(red);
p.setBlue(blue);
}
image.draw();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.