我正在尝试渲染图像,但此行中出现了内存错误。
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 - 由于黑客和我的代码正在运行而解决了这个问题,但我很好奇为什么会发生这一切。