这是问题所在:我正在加载分辨率未知的图像。我需要将其缩放到500px的宽度以适合我的UI,同时保持宽高比。图像质量必须很好,因为我以后需要使用它,特别是要计算图像中两个对象之间的角度。
到目前为止,我已经尝试了以下方法:
在以下示例中,我们有一个现有的UI元素
ImageView imageView;
方法一:在JavaFX图像构造函数中使用负载缩放:
public void setImage(String path){
Image image = new Image(path, 550, 412, true, true);
imageView.setImage(image);
}
该方法可以实现所需的缩放比例,但是缺乏稍后精确计算角度所需的质量。
方法二:使用ImageView缩放来缩放显示的图像:
public void setImage(String path){
Image image = new Image(path);
imageView.setFitWidth(550);
imageView.setPreserveRatio(true);
imageView.setImage(image);
}
这可以达到所需的质量和缩放比例,但是视图中包含 的图像实际上并未缩放,这意味着该行后面的计算使用的是不代表所显示图像的图像
我是否可以通过改变这些解决方案来更好地工作,还是可以采取更好的方法?谢谢。
答案 0 :(得分:0)
您将不得不使用
imageView.setSmooth(true);
在缩放后获得更好的图像质量。
编辑:
这是因为,这两种方法本质上是不同的。第一种方法首先加载质量较差的图像(像素较少)。您可以尝试的一件事是,使用ImageIO
使用AWT Image类来加载图像,然后调用scaledImage = image.getScaledInstance(width, height)
。然后使用类似(伪代码-从内存中写入)的内容:
bufferedImage.createGraphics()
.drawImage(scaledImage, 0, 0, null)
获取缩放的AWT图像。然后使用SwingFXUtils转换为FX应用程序的图像。通过链接方法,可以用3行代码完成整个过程。在以前的一个项目中,我能够以此方式获得更好的质量。