Java 是否保留ImageIcon或BuffereImage的数组?

Java 是否保留ImageIcon或BuffereImage的数组?,java,swing,type-conversion,bufferedimage,imageicon,Java,Swing,Type Conversion,Bufferedimage,Imageicon,我的Java程序在启动时加载一堆映像。现在,对于每一张图片,我称之为这段代码。最后我得到了一个ImageIcon数组,它将用于用户界面 InputStream is = getClass().getClassLoader().getResourceAsStream(imagePath); bimage = ImageIO.read(is); is.close(); Image img = bimage.getScaledInstance(width, height, Image.SCALE_SM

我的Java程序在启动时加载一堆映像。现在,对于每一张图片,我称之为这段代码。最后我得到了一个ImageIcon数组,它将用于用户界面

InputStream is = getClass().getClassLoader().getResourceAsStream(imagePath);
bimage = ImageIO.read(is);
is.close();
Image img = bimage.getScaledInstance(width, height, Image.SCALE_SMOOTH);
return new ImageIcon(img);
但现在我想实现一个方法,该方法将从数组中获取一个对象,并用指定的语言添加标题。所以我必须使用Graphics2D.drawString()。但是ImageIcon没有createGraphics()方法。有没有办法从ImageIcon获取图形

Graphics2D g = bimage.createGraphics();
g.setColor(Color.red);
g.setFont(new Font( "SansSerif", Font.BOLD, 25 ));
g.drawString("TEST", 25, 25);

现在的问题是:我应该保留ImageIcon或BuffereImage的数组吗?

您是一次性添加这些文本还是更改文本?如果你这样做,你会多久更改一次?就个人而言,我会保留对BuffereImage的引用,这纯粹是从一些做大量grahhics工作的人的角度来看的,因此我发现BuffereImage更灵活。话虽如此,你所做的任何事情都不能用一个简单的方法来完成ImageIcon@TobiasRitzau我一次也没换。在这个任务中,它一直在变化。@NikolayKuznetsov我认为,因为您将图像作为缓冲区图像读取,所以将它们包装在ImageIcon中是一个不需要的额外步骤。另外,如果你在画图像,我会先复制一份,这样原稿就不会被复制了tinted@NikolayKuznetsov有许多技术可以用于缩放图像。如果你知道图像总是静态大小,你可以在加载之前缩放它们,省去麻烦。你应该读一读,它提出了一些有趣的想法,我经常看到的一种更常见的方法是分治法,你将图像缩放50%(或除以2),直到达到所需的大小。这不需要
图像