很抱歉,如果这会给任何人带来麻烦,但我不确定我在搜索答案时遇到的其他问题。我的问题是我正在创建一个类,只是将高斯噪声添加到传入的文件类型中。一旦我添加了噪声,我想将结果返回到我创建的MainScreen类。问题是,MainClass在其JPanel中使用File。
我的问题是如何将BufferedImage类型转换为我的Mainscreen类的File类型返回,而不会导致错误用于Swing的Jpanel?
这是代码,如果您想要清楚地看到它。 (如果这是错误的问题,我可以关闭这个问题;我是所有这一切的新手,我会对此有所了解)
import java.io.*;
import java.util.*;
import java.lang.Math;
import java.awt.Image;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
public class NoiseGenerator {
Image image;
BufferedImage buffered;
Random r;
int width;
int height;
int index;
//The part of the code I'm referring to in the question
//addNoiseToImage takes in a File.
public BufferedImage addNoiseToImage(File imageToBeChanged, int standardDeviation){
try {
image = ImageIO.read(imageToBeChanged);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
buffered = (BufferedImage) image;
width = image.getWidth(null);
height = image.getHeight(null);
index = 0;
double noiseHolder;
int noiseValues[] = new int[100];
int delay = 0;
int check = 0;
do {
noiseHolder = r.nextGaussian() * standardDeviation;
check = (int) Math.round(noiseHolder);
if (check > 0) {
noiseValues[delay] = (int) noiseHolder;
delay++;
}
} while (delay <= 100);
int j;
int i;
for (j=0; j<height; j++) {
for(i=0;i<width;i++) {
index = (int) (Math.random() * (99 - 0)) + 0;
buffered.setRGB(j,i,noiseValues[index]);
}
}
return buffered; //I just have it returning a BufferedImage type to stop the error message; I'd prefer it to be a File type.
}
}
答案 0 :(得分:2)
Image I / O类提供了一种在以下示例中以各种图像格式保存图像的简单方法:
static boolean ImageIO.write(RenderedImage im,
String formatName,
File output) throws IOException
注意:BufferedImage类实现RenderedImage接口。
formatName参数选择保存BufferedImage的图像格式。
try {
// retrieve image
BufferedImage bi = getMyImage();
File outputfile = new File("saved.png");
ImageIO.write(bi, "png", outputfile);
} catch (IOException e) {
...
}
有关详细信息,请查看this示例。