我有一堆48x48图像,我需要16x16版本,而不是存储16x16版本,我想在运行中调整它们的大小。我当前的代码看起来像这样(model.icon()返回48x48图像):
Icon icon = model.icon();
Image image = new BufferedImage(icon.getIconWidth(), icon.getIconHeight(), BufferedImage.TYPE_INT_RGB);
return new ImageIcon(image.getScaledInstance(16, 16, Image.SCALE_AREA_AVERAGING));
不幸的是,当运行此代码时,我得到一个16x16黑色方块而不是图像。
答案 0 :(得分:4)
试试这个。
ImageIcon icon = model.icon();
Image image = new BufferedImage(icon.getIconWidth(), icon.getIconHeight(), BufferedImage.TYPE_INT_RGB);
image.getGraphics().drawImage(icon.getImage(), 0, 0, 16, 16, null);
return new ImageIcon(image);
答案 1 :(得分:3)
您需要的信息不仅仅是Icon参考。您需要访问实际图像。您的新图像是黑色正方形,因为您从未设置图像源(即您创建新的黑色图像然后缩放空图像)。
答案 2 :(得分:2)
您没有将图标放入图像中。如果图标是ImageIcon
,则可以执行以下操作:
..
Graphics2D g2 = image.createGraphics();
g2.drawImage(icon.getImage(), 0, 0, 16, 16, null);
g2.dispose();
return new ImageIcon(image);