当前位置: 首页 > 知识库问答 >
问题:

将窗格的快照保存为不同大小的文件

太叔栋
2023-03-14

除了pane_scene的原始大小之外,是否有办法将快照图像保存到磁盘的不同大小。我已经尝试了在网上找到的所有方法,包括为新快照设置参数,但我得到一个错误。如何更改下面的代码以1080 * 1080像素保存快照图像?非常感谢

public class Controller {
@FXML
private Pane pane_scene;
@FXML
private ImageView img;

    public void download()throws IOException {
        if (img.getImage() == null){
            Alert alert = new Alert(Alert.AlertType.INFORMATION);
            alert.setTitle("Note");
            alert.setHeaderText("Information");
            alert.setContentText("Please preview image first");
            alert.show();
        }
        else {
            FileChooser fileChooser = new FileChooser();
            fileChooser.setTitle("Save");
            fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("png", "*.png"));
            File file = fileChooser.showSaveDialog(new Stage());
            if (file != null){
                SnapshotParameters sp = new SnapshotParameters();
                WritableImage image = pane_scene.snapshot(sp,null);
                ImageIO.write(SwingFXUtils.fromFXImage(image,null), "png",file);
                System.out.println(file.getName());
            }
        }
    }
}

谢谢

共有1个答案

钱季
2023-03-14

我不确定您想要实现什么,但我正在使用以下技术创建渲染比例感知快照,我认为您可以在您的情况下执行类似的操作。诀窍是提供正确大小的图像并设置显式变换。

public static WritableImage renderScaleAwareSnapshot(Node node, double renderScale, WritableImage writableImage,
        double x, double y, double width, double height) {
    int renderWidth = (int) Math.rint(renderScale * width);
    int renderHeight = (int) Math.rint(renderScale * height);
    if (writableImage == null || (int) Math.rint(writableImage.getWidth()) != renderWidth
            || (int) Math.rint(writableImage.getHeight()) != renderHeight) {
        writableImage = new WritableImage(renderWidth, renderHeight);
    }
    SnapshotParameters spa = new SnapshotParameters();
    spa.setViewport(new Rectangle2D(x * renderScale, y * renderScale, width, height));
    spa.setTransform(Transform.scale(renderScale, renderScale));
    return node.snapshot(spa, writableImage);
}
 类似资料:
  • 这里是我的代码,在那里我已经尝试了几个小时,将上传的图像保存在不同大小的服务器文件夹中。但是,图像没有被保存,并且无法得到它出错的地方。以前,我使用二进制代码编写,如下面的第二个代码部分所示,通过从移动端以某种方式带来二进制数据(图片是从相机中获取的,并从移动端即时发送)。但随着数据的增加。我决定使用甚至上传图像文件与多部分类型的文件上传从我的移动端。 但下面的工作与我以前获取二进制数据时的相同函

  • 问题内容: 我有一个具名的,不需要让用户调整其大小。当然,我可以在每次用户尝试时重新调整它的大小,但是有什么办法不让用户将窗口打开到全屏或拉伸窗口呢? 问题答案: 编辑/更新: Xcode 10.2•Swift 5 NSWindow具有一个称为styleMask的属性,该属性使您可以控制用户可以使用哪种控件。如果不想让用户调整窗口大小,则必须使用mutating方法删除样式掩码.resizable

  • 问题内容: 在写入Redis()期间,出现以下错误: MISCONF Redis配置为保存RDB快照,但当前无法持久保存在磁盘上。禁用了可能修改数据集的命令。请检查Redis日志以获取有关该错误的详细信息。 基本上,我了解到问题在于redis无法将数据保存在磁盘上,但是不知道如何解决该问题。 同样,以下问题也有相同的问题,它很久以前就被抛弃了,没有答案,很可能没有尝试解决该问题。 问题答案: 万一

  • 在写入Redis()的过程中,我收到以下错误: MISCONF Redis配置为保存RDB快照,但当前无法在磁盘上持久保存。禁用可能修改数据集的命令。有关该错误的详细信息,请查看Redis日志。 基本上,我知道问题是redis不能在磁盘上保存数据,但不知道如何解决这个问题。 下面的问题也有同样的问题,它很久以前就被放弃了,没有答案,很可能也没有试图解决问题。

  • 与此类似的问题有几个,如: Redis被配置为保存RDB快照,但它目前无法持久保存在Disk-Ubuntu服务器上 MISCONF Redis配置为保存RDB快照,但当前无法在磁盘上持久保存。禁用可能修改数据集的命令 当Redis安装在Docker之外时,这就可以工作了。但是我如何用docker-compose运行这个命令呢? 我尝试了以下操作: 这不起作用: 怎么解决这个?

  • 我想我可能错过了一些配置,但我们正在尝试使用Debezium来从一个有大约800万条记录的表中快照所有行,一段时间后它就会停止。 连接器配置为: 连接器开始扫描行: 然后过了一段时间,我们 然后,扫描停止,我们多次尝试再次刷新提交偏移: 一段时间后(大约9~10分钟),它似乎成功了,并开始再次扫描行。但是过了一段时间后,它再次失败,然后,没有完成所有记录,连接器将其状态更改为 其中一个错误是 我读