我有一段代码,用于将图像大小调整为窗帘大小(我想将分辨率更改为 200 dpi 之类的值)。基本上我需要它的原因是因为我想显示用户选择的图像(有点大),然后如果用户批准我想在不同的地方显示相同的图像但使用较小的分辨率。不幸的是,如果我给它一个大图像,屏幕上什么也不会出现。另外,如果我改变
imageLabel.setIcon(newIcon);
to
imageLabel.setIcon(icon);
我可以显示图像,但分辨率不正确,这就是我知道代码片段中存在问题而不是其他地方的问题的原因。
Image img = icon.getImage();
BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_ARGB);
BufferedImage bi = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_ARGB);
Graphics g = bi.createGraphics();
boolean myBool = g.drawImage(img, 0, 0, 100, 100, null);
System.out.println(myBool);
ImageIcon newIcon = new ImageIcon(bi);
imageLabel.setIcon(newIcon);
submitText.setText(currentImagePath);
imageThirdPanel.add(imageLabel);
您实际上不必关心缩放图像的细节。 Image 类已经有一个方法getScaledInstance(int width, int height, int hints)
为此目的而设计。
Java 文档说:
创建此图像的缩放版本。返回一个新的 Image 对象
这将以指定的宽度和高度渲染图像
默认。新的 Image 对象可能会异步加载,即使
原始源图像已完全加载。如果其中之一
宽度或高度为负数,则替换为一个值
保持原始图像尺寸的纵横比。
你可以像这样使用它:
// Scale Down the original image fast
Image scaledImage = imageToScale.getScaledInstance(newWidth, newHighth, Image.SCALE_FAST);
// Repaint this component
repaint();
Check this一个完整的例子。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)