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

带有alpha的JavaFX8画布快照

谭志用
2023-03-14

我目前正在开发一个绘画程序(类似于Gimp和Photoshop),为了做到这一点,我需要图层。我创建了一个名为JImage的类,它有一个ArrayList

public Image toImage(){ //Returns the final image which is all its layers combined into one canvas and snapshotted.
    Canvas c = new Canvas(width, height); //width and height are determined in the constructor
    for(int i=layers.size()-1;i>=0;i--){
        Canvas currLayer = layers.get(i);
        c.getGraphicsContext2D().drawImage(currLayer.snapshot(new SnapshotParameters(), new WritableImage(width,height)));
    }
    return c.snapshot(new SnapshotParameters(), new WritableImage(width,height));
}

我的问题是,当你做canvas.snapshot(SnapshotParameters, WritableImage)时,alpha层不包括在内,背景总是白色的。这使我无法将其发送到没有丑陋的白色背景的文件。有没有一种方法,我可以得到一个图像出来的多个画布与阿尔法层?我更喜欢使用JavaFX解决方案,所以请在JavaFX的范围内给出解决方案。


共有1个答案

韩善
2023-03-14

将快照参数的填充设置为颜色。在你拍快照之前透明。

SnapshotParameters params = new SnapshotParameters();
params.setFill(Color.TRANSPARENT);
Image snapshot = currLayer.snapshot(params, null);

javadoc:

将填充设置为指定值。这用于在渲染节点之前填充正在渲染的整个图像。值为null表示填充应使用白色。默认值为null。

 类似资料:
  • 问题内容: 我目前正在开发一个绘画程序(类似于Gimp和Photoshop),为了做到这一点,我将需要图层。我创建了一个名为JImage的类,其中包含和一些方法。 我的问题是,当您这样做时,不包括alpha层,并且背景始终为白色。这样可以防止我在没有丑陋的白色背景的情况下将其发送到文件中。有什么办法可以从具有alpha层的多个画布中获取图像?我希望将JavaFX用于此解决方案,因此请在JavaFX

  • **编辑**我必须导出一个大画布(5Mo 当我导出我的画布(使用toDataUrl)时,它总是返回一个带有alpha通道的. png文件的bas64表示。阿尔法通道权重约为图像数据的25%,我不需要它。 建议的答复: PNG压缩是好的。如果alpha通道是平坦的(所有值都相同),则不会占用太多空间。即使使用完全不透明的alpha通道,也会显示(压缩)。png文件更大。(在一些测试中约为10%) 有

  • 下面可运行示例中的箭头应该用从箭头底部到箭头头部的红色alpha渐变填充。 我一定错过了什么明显的事情!? 谢谢你的调查! Stackoverflow希望我添加更多细节,因为“大部分是代码”,但我真的不知道要添加什么。:-)

  • 我必须在JavaFX中做一些用画布绘制正多边形的项目,我对如何使用GraphicsContext用画布设计一个圆有疑问 在主JavaFX中

  • 问题内容: 我正在宽度不相等的画布上绘制图形。每个画布是否都有自己的滚动条?我试图将所有画布放在一个div中,并指定最大宽度,但这没有用。是否可以将所有画布在页面上的可见宽度说成500像素,并且每个画布都有其滚动条以查看画布的整个宽度。 谢谢。 问题答案: 指定画布的总宽度,然后将其包裹在div中。将div设置为,并指定500px的宽度。然后,您应该具有滚动条,使您可以滚动并查看画布的隐藏部分。对

  • 本章将介绍如何使用Canvas和javax.swing包的JFrame类绘制JOGL基本框架。 在这里,我们将实例化一个JFrame,并使用add()方法将canvas对象添加到JFrame的实例中。 使用Canvas和AWT为您提供具有重量级功能的图形框架。 要拥有轻量级图形框架,您需要将GLCanvas与Swing一起使用。 将GLCanvas与Swing一起使用时,可以直接将GLCanvas