我想使用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了解更多详情。
感谢任何提示!
答案 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中调整图像大小。显然,您可以使用其他/更简单的重新缩放方法,但图像质量不会那么好。