如何保存JavaFX Canvas的高DPI快照

Cob*_*sve 4 javafx javafx-8

我在Canvas上创建了一个图像,该图像按比例缩小以便使用变换进行显示.它也在ScrollPane中,这意味着只有部分图像可见.

我需要拍摄整个画布的快照并将其保存为高分辨率图像.当我使用Canvas.snapshot时,我在缩小后得到图像可见部分的可写图像.这导致保存低分辨率的部分图像.

那么我该如何创建一个快照,其中包括整个画布(不仅是滚动窗格的视口)以及转换前的分辨率?

我目前没有做任何奇特的事,只是这样:

public WritableImage getPackageCanvasSnapshot()
{
    SnapshotParameters param = new SnapshotParameters();
    param.setDepthBuffer(true);
    return packageCanvas.snapshot(param, null);
}
Run Code Online (Sandbox Code Playgroud)

mip*_*ipa 9

我做了以下操作,在带有pixelScaleFactor 2.0的Retina显示屏上获得画布快照.它对我有用.

public static WritableImage pixelScaleAwareCanvasSnapshot(Canvas canvas, double pixelScale) {
    WritableImage writableImage = new WritableImage((int)Math.rint(pixelScale*canvas.getWidth()), (int)Math.rint(pixelScale*canvas.getHeight()));
    SnapshotParameters spa = new SnapshotParameters();
    spa.setTransform(Transform.scale(pixelScale, pixelScale));
    return canvas.snapshot(spa, writableImage);     
}
Run Code Online (Sandbox Code Playgroud)

  • 太棒了,太完美了,所以技巧是提供一个与画布大小相同的图像,如果你要求它创建它,那么它只会创建视口的大小,并且通过将其放大到你的目的地,你可以得到我所要求的。现在一切都说得通了。完美的 ! (2认同)