[英]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.