Java灰度图像

Java灰度图像,java,performance,grayscale,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(

一段时间以来,我一直在研究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%。它似乎也会导致我内存泄漏,最终导致OOMs


在java中,有没有一种更简单、更快速的方法可以在不使用太多CPU的情况下实现灰度化/消除JVM错误带来的挂起?

我编写了一个java程序来将RGB图像转换为灰度图像。希望这有帮助

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();
    }

}
公共类灰度{
缓冲图像;
整数宽度;
内部高度;
公共灰度(){
试一试{
文件输入=新文件(“图像的输入路径”);
图像=图像IO.read(输入);
宽度=image.getWidth();
高度=image.getHeight();
对于(int i=0;i
需要多少时间?也许。。。你说的是一只虫子,实际上是两只。你能给我们一个完整的崩溃例子吗?Java内存泄漏。使用垃圾收集器是不可能的…图像的大小是多少,原始格式是什么,。。。如果数据不可用,很难重现结果。