Java灰度图像

时间:2014-09-15 19:51:53

标签: java performance grayscale

我一直在努力在java中使用灰度图像。我使用的是colorConvertOp,但似乎在完成了一系列图像处理之后,最终JVM会在op中挂起锁定状态。

现在我开始使用:

BufferedImage image = new BufferedImage(size, size, BufferedImage.TYPE_BYTE_GRAY);  
Graphics g = image.getGraphics();  
g.drawImage(img, 0, 0, null);  
g.dispose(); 

但是,我看到CPU出现了大幅增长,过去曾经在 20%之下,现在达到 120%。它似乎也导致我的内存泄漏,并最终导致 OOM

在没有使用尽可能多的CPU /消除挂起JVM错误的情况下,是否有更简单,更快速的灰度级方法?

1 个答案:

答案 0 :(得分:0)

我写了一个java程序将RGB图像转换为GrayScaleImage。希望这会有所帮助

public class GrayScale {

    BufferedImage image;
    int width;
    int height;

    public GrayScale() {

        try {
            File input = new File("input path of the image");
            image = ImageIO.read(input);
            width = image.getWidth();
            height = image.getHeight();

            for (int i = 0; i < height; i++) {

                for (int j = 0; j < width; j++) {

                    Color c = new Color(image.getRGB(j, i));
                    int red = (int) (c.getRed() * 0.299);
                    int green = (int) (c.getGreen() * 0.587);
                    int blue = (int) (c.getBlue() * 0.114);
                    Color newColor = new Color(red + green + blue,

                    red + green + blue, red + green + blue);

                    image.setRGB(j, i, newColor.getRGB());
                }
            }

            File ouptut = new File("output path of the image");
            ImageIO.write(image, "jpg", ouptut);

        } catch (Exception e) {
        }
    }

    static public void main(String args[]) throws Exception {
        GrayScale obj = new GrayScale();
    }

}