2
我使用下面的代碼編寫一個程序來對圖像進行各種操作:改變WritableRaster對象影響BufferedImage對象
import java.awt.Desktop;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.awt.image.WritableRaster;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
public class BrightnessContrast {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
int i, j, choice = 1;
String imgName;
boolean flag = true;
String imagePath = "images/test.jpg";
BufferedImage myImage = ImageIO.read(new File(imagePath));
int height = myImage.getHeight();
int width = myImage.getWidth();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
final BufferedImage greyImage = new BufferedImage(width, height,BufferedImage.TYPE_BYTE_GRAY);
Graphics grp = greyImage.getGraphics();
grp.drawImage(myImage, 0, 0, null);
File f2 = new File("images/BrightnessContrastTestInput.jpg");
try {
ImageIO.write(greyImage, "JPG", f2);
} catch (IOException x) {
x.printStackTrace();
}
while (flag == true) {
System.out
.println(" 1.Brightness \n 2.Contrast \n 3.EXIT!");
choice = Integer.parseInt(br.readLine());
switch (choice) {
case 1:
//increase brightness
case 2:
//increase contrast
case 3:
flag = false;
break;
default:
System.out.println("Invalid Option. Please try again.");
break;
}
}
}
public static void ImageOperation(BufferedImage greyImage) {
WritableRaster myRaster = greyImage.getRaster();
for (j = 0; j < greyImage.getHeight(); j++) {
for (i = 0; i < greyImage.getWidth(); i++) {
//some logic to increase contrast and brightness
}
}
File f = new File("images/"+imgName);
try {
ImageIO.write(greyImage, "JPG", f);
} catch (IOException x) {
x.printStackTrace();
}
}
}
}
所有操作均在ImageOperation
方法可寫光柵對象myRaster
上完成,myRaster
是使用BufferedImage對象greyImage
創建。
現在,在我第一次運行時(比方說)通過某個因子增加圖像的對比度時,它會給出正確的結果,第二次如果我應用完全相同的對比度,以前增強的圖像,而不是原來的圖像,因此,在第二次的時候它會給我一個更高的對比度。
我的問題是,每當我在myRaster
上增加對比度時,BufferedImage對象greyImage
都會更新?
這正是問題所在,製作了原始圖像的副本,並將其發送給函數。謝謝! – md1hunox