ImageView没有调整图像大小

时间:2013-02-17 19:16:15

标签: imageview javafx-2

我想使用ImageView来调整图像大小,但是图像没有调整大小:

ImageView imageView = new ImageView(image); 
imageView.setPreserveRatio(true);
imageView.setFitHeight(40);
System.out.println("imageview image width = " + imageView.getImage().getWidth());
System.out.println("imageview image height = " + imageView.getImage().getHeight());

输出

imageview image width = 674.0
imageview image height = 888.0

但是,宽度应为40.我的ImageView没有附加到任何场景,我也不想附加它,它只能用于图像大小调整。 有没有办法强制ImageView调整其图像大小,即使ImageView没有附加到任何场景?我使用ImageView进行大小调整的原因是,我要调整Image中的大小RAM,无需再次从磁盘读取,请参阅this question了解更多详情。

感谢任何提示!

1 个答案:

答案 0 :(得分:0)

使用ImageView进行大小调整似乎非常黑客。

更好的方法是将您的Image转换为BufferedImage,然后调整旧方法的大小。 (JavaFx(尚未提供)调整内存映像大小的内部方法)

int width = 500; // desired size
int height = 400;
Image original = ...; // fx image

BufferedImage img = new BufferedImage(
        (int)original.getWidth(),
        (int)original.getHeight(),
        BufferedImage.TYPE_INT_ARGB);

SwingFXUtils.fromFXImage(original, img);
BufferedImage rescaled = Scalr.rescaleImage(img, width, heigth);  // the actual rescale

// convert back to FX image
WritableImage rescaledFX = new WritableImage(width, heigth);
SwingFXUtils.toFXImage(rescaled, rescaledFX);

其中Scalr是一个很好的库,用于在本机java中调整图像大小。显然,您可以使用其他/更简单的重新缩放方法,但图像质量不会那么好。