我想预加载(加载到内存中)约10张jpg图片(尺寸3264px x 2448px)。每个图像文件大小约为3MB。我试图将它们加载到BufferedImage的ArrayList中,但出现OutOfMemoryError异常(Java堆空间)。如何应付呢?

最佳答案

..有可能以压缩形式存储图像吗?

当然,将它们加载为字节数组并保留对每个(3 Meg)数组的引用。当您需要每张实际图像时,通过将其包装在ByteArrayInputStream中将其标记为图像,并将其用作ImageIO.read(InputStream)的源。

对于10 byte[],大约为30 Meg,对于每个实现的图像,则约为321 meg。

  • AFAIU JPEG图像不能具有透明性,因此32 Meg ARGB图像将为24 Meg作为RGB。
  • 10-07 18:50