java中的图像渲染抛出内存不足错误(使用pdfbox)

时间:2016-06-25 06:02:39

标签: java image tesseract pdfbox heap-memory

我正在尝试渲染图像,但此行中出现了内存错误。

 try{
     BufferedImage image = pdfRenderer.renderImageWithDPI(page-1, 300,ImageType.GRAY);
     ImageIOUtil.writeImage(image,"G:/Trial/tempImg.png", 300);
     int bpp = image.getColorModel().getPixelSize();
     int bytespp = bpp / 8;
     int bytespl = (int) Math.ceil(image.getWidth() * bpp / 8.0);
     int height = image.getHeight();
     int width = image.getWidth();

     TessAPI1.TessBaseAPISetImage(handle, ImageIOHelper.convertImageData(image), width, height, bytespp, bytespl);
     TessAPI1.TessBaseAPISetPageSegMode(handle, TessPageSegMode.PSM_AUTO);
    //codes
    }
    finally
    {
    //some code so that this function could be called again with next pdf
    //some code to release resources
    }

在这个代码段中,我首先将一个特定的页面从pdf文档呈现为BufferedImage,然后我将bufferedImage转换为Bytes,然后再将其提供给tesseract。正是在这一点上,我得到了内存不足错误。

通常当你出现内存不足错误时,你会在它旁边再收到一条消息,无论是堆外还是烫发。但是,在这里我只是出现内存不足错误。请解释一下。

当我调试这段代码时,我发现代码并没有终止于我将图像转换为字节的行,而是终止于块(我正在使用try和finally块来代替此代码段) 。 所以我最后继续使用我的代码,我的代码完全适用于下一组pdfs。

所以我的问题是我的程序如何在内存不足错误后退出(不是我希望它不起作用)但是如果内存真的已满,那么代码如何加载下一组pdfs。 对此的见解真的很棒。 感谢

P.S - 由于黑客和我的代码正在运行而解决了这个问题,但我很好奇为什么会发生这一切。

0 个答案:

没有答案