将大量图像显示在网格中

时间:2012-08-01 16:17:49

标签: java swing memory-management bufferedimage

我有一个应用程序,我想在其中显示许多图像组件。其中的每一项都是custom jcomponent,它会在BufferedImage对象中包含图像,以便在paintcomponents(Graphics g)覆盖的方法中绘制它。我还会使用JPanel作为网格,其中gridlayoutflowlayout用于放置自定义图片jcomponents,网格布局也位于JscrollPane内。

我的问题是当我必须放入网格的图像数量变大时会发生什么。使用jscrollpane时,组件的数量因此必须绘制的图像数量将更小,如20-30个组件,但插入网格的每个组件将具有BufferedImage对象以保持相应的图片。这对性能和内存消耗有害吗?可以用一些模式吗?例如,如果我使用一个主要参考点将图像从磁盘加载到bufferedimage,并根据用户scrollpane的哪个矩形,然后释放一些缓冲图像,它们放在当前网格中jscrollpane的位置?

谢谢。

2 个答案:

答案 0 :(得分:2)

您将不得不对基本变量进行原型设计并对结果进行分析。然后将这些结果与最低公分母目标平台上的可用功能进行比较。 sscce非常宝贵。例如,此one可让您轻松更改N图片数量。

提到了一些替代方案here

注释中注意:为了节省内存,请考虑LRU cache

答案 1 :(得分:2)

  1. 线程加载图像,以便UI不会因加载而延迟
  2. 缩放图像,可能适合面板的大小,浪费内存没有意义