【问题标题】:JavaFX: multiple snapshots in single imageJavaFX:单个图像中的多个快照
【发布时间】:2013-05-19 12:34:14
【问题描述】:

我学会了使用snapshot 从一个节点中创建一个Image 对象。拥有多个包含各种笔画的Groups,我现在正尝试创建一个包含两组笔画的单个图像。为此,我使用以下代码:

Group strokes1;
Group strokes2;
WriteableImage im = null;

SnapshotParameters params = new SnapshotParameters();
params.setFill(Color.TRANSPARENT);
params.setViewport(new Rectangle2D(0, 0, 400, 400)); 

im = strokes1.snapshot(params, im);
im = strokes2.snapshot(params, im);

snapshot 函数的文档说

"如果图片不为空,则将节点渲染到现有图片中。"

但是,生成的图像im 仅包含来自strokes2 的笔画。我做错了什么?

【问题讨论】:

  • 做更多测试,当图像被传递到snapshot 函数时,SnapshotParameters 中的 fill 参数似乎被忽略了 - 这可能吗?
  • 您能否发布一个可运行的示例来说明您正在尝试做什么?
  • 老实说,与此相关的代码真的不多。所以有一些EventHandler<MouseEvent> 创建了Path 对象,这些对象插入strokes1strokes2(取决于某些条件)。 strokes1strokes2 都被添加到带有 drawingPane.getChildren().add(strokes1)drawingPane.getChildren().add(strokes2)Pane
  • 问题是,如果我注释掉 'im = strokes1.snapshot(params, im);',我会看到它下面的行,反之亦然。所以单行工作正常,但如果我尝试合并两个快照,它会失败。

标签: java javafx-2 javafx


【解决方案1】:

实现目标的一种方法是在要转换的BufferedImageGraphics2D 上使用setComposite() 方法,此解决方案简要讨论herehere

这个gist 提供了该方法的可运行完整示例。

【讨论】:

    猜你喜欢
    • 2015-11-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-24
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 2015-12-18
    相关资源
    最近更新 更多