我只是想问一下如何获取图像的宽度和高度,因为这会为宽度和高度返回-1:
private void resizeImage(Image image){
JLabel imageLabel = new JLabel();
int imageWidth = image.getWidth(null);
int imageHeight = image.getHeight(null);
System.out.println("Width:" + imageWidth);
System.out.println("Height:" + imageHeight);
}
答案 0 :(得分:3)
你应该这样做:
BufferedImage bimg = ImageIO.read(new File(filename));
int width = bimg.getWidth();
int height = bimg.getHeight();
正如post所说
答案 1 :(得分:0)
究竟为什么在您的情况下发生这种情况尚不清楚,您没有明确指出image
实际上是什么。
无论如何,答案可以在JavaDoc:
中找到public abstract int getWidth(ImageObserver observer)
确定图像的宽度。如果宽度尚不知道,则此方法返回-1,稍后会通知指定的ImageObserver对象。
无法立即确定所讨论图像的宽度和高度。您需要传递一个ImageObserver
实例,该实例将在可以解析高度和宽度时调用this方法。
答案 2 :(得分:0)
public static BufferedImage resize(final Image image, final int width, final int height){
assert image != null;
final BufferedImage bi = new BufferedImage(width, height, image instanceof BufferedImage ? ((BufferedImage)image).getType() : BufferedImage.TYPE_INT_ARGB);
final Graphics2D g = bi.createGraphics();
g.drawImage(image, 0, 0, width, height, null);
g.dispose();
return bi;
}
上面发布的代码是调整图像大小的一种方法。通常,为了获得图像的宽度和高度,您可以这样做:
image.getWidth(null);
image.getHeight(null);
这一切都假设图像不为空。
答案 3 :(得分:0)
使用{{3}},您可以获得更好的图像宽度和高度,而无需将整个图像读取到内存中。
下面的示例代码使用的是Sanselan 0.97-incubator(当我写这篇文章时,Commons Imaging仍然是SNAPSHOT):
final ImageInfo imageInfo = Sanselan.getImageInfo(imageData);
int imgWidth = imageInfo.getWidth();
int imgHeight = imageInfo.getHeight();