从BufferedImage到File:返回类型问题

时间:2014-04-16 20:32:17

标签: java swing file bufferedimage

很抱歉,如果这会给任何人带来麻烦,但我不确定我在搜索答案时遇到的其他问题。我的问题是我正在创建一个类,只是将高斯噪声添加到传入的文件类型中。一旦我添加了噪声,我想将结果返回到我创建的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.
    }
}

1 个答案:

答案 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示例。