1

我需要根据图像的最长边调整图像的大小,例如最长边(可以是宽度或高度)应该只有 100 像素长。

目前我正在使用这种方法:

private Image resizeImageByLongestSide(File imageFile, int lengthLongestSide)
{
    String uri ="file:" + imageFile.getAbsolutePath();
    Image image = new Image(uri); // raed to determine width/height

    // read image again for resizing
    if(image.getWidth() >= image.getHeight())
        return new Image(uri, lengthLongestSide, 0, true, false);
    else
        return new Image(uri, 0, lengthLongestSide, true, false);
}

因此,首先必须通过磁盘读取图像以确定哪一边是最长的一边,而不是再次从磁盘读取,因为调整大小似乎只能通过使用 Image 构造函数...任何提示/改进这?谢谢 :-)

4

2 回答 2

1

所有你需要的是ImageView

在内存中加载一次图像,然后在需要时对图像视图进行操作。

示例代码:

//load image to memory
final static Image MY_IMAGE = new Image(path of image file);
//create different imageviews pointing to image in memory and do manipulations
ImageView myImage = new ImageView(MY_IMAGE);
myImage.setFitHeight(value);
myImage.setFitWidth(value);
于 2013-02-17T03:01:38.247 回答
1

不变量接近最终解决方案,最终解决方案的功劳归于 oracle 论坛中的 l2p

ImageView 不会改变实际的图像,无论它是否在场景中。它只渲染给定图像中的可见节点。如果你想让它从当前可见状态渲染一个新图像,你必须创建一个快照()。所以:

Image resizedImage = myImageView.snapshot(null, null); // after using myImageView.setFitHeight()/setFitWidth/( etc.

修正:

当前方法失去了透明度,因为默认控件(此处:imageview)背景为白色。白色的透明度截图(来自我们的图像)给出了白色,所以我们失去了原来的透明度。解决此问题:将背景本身设置为透明。

所以,固定代码:

SnapshotParameters params = new SnapshotParameters();
params.setFill(Color.TRANSPARENT); 
return imageView.snapshot(params, null); 

见鬼,这东西很棘手;-)

于 2013-02-18T14:13:46.060 回答