我在Canvas上创建了一个图像,该图像按比例缩小以便使用变换进行显示。它也在ScrollPane中,这意味着只有部分图像可见。
我需要拍摄整个画布的快照并将其保存为高分辨率图像。当我使用Canvas.snapshot时,我在缩小后得到图像可见部分的可写图像。这会导致保存低分辨率的部分图像。
那么我该如何创建一个快照,其中包括整个画布(不仅是滚动窗格的视口)以及转换前的分辨率?
我目前没有做任何奇特的事情,只是这个:
public WritableImage getPackageCanvasSnapshot()
{
SnapshotParameters param = new SnapshotParameters();
param.setDepthBuffer(true);
return packageCanvas.snapshot(param, null);
}
答案 0 :(得分: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);
}