【发布时间】:2015-03-04 02:48:16
【问题描述】:
我想知道 JavaFX 中 Canvas 的 GraphicsContext 中是否有任何方法可以覆盖路径中的所有像素,从而使它们再次变得透明。与 clearRect 函数类似,但适用于任何路径。
我查看了不同的 BlendModes 和 Effects,但似乎没有办法真正覆盖可以通过例如实现的 alpha 值
- 使用 Porter/Duff Src 运算符渲染透明颜色
- 在 HTML5 中使用 globalCompositeOperation 目的地输出呈现非透明颜色
如果有人知道一种无需细分路径和使用多个 clearRect 调用即可实现此目的的方法,我将非常高兴。谢谢。
http://docs.oracle.com/javase/8/javafx/api/javafx/scene/canvas/GraphicsContext.html
对第一条评论的补充: 我没有使用 Path 节点,而是使用 Canvas 节点使用 GraphicsContext 执行渲染,因此无法修改先前渲染路径的颜色。 我正在尝试做类似的事情
Canvas canvas = …;
final GraphicsContext context = canvas.getGraphicsContext();
context.setFill(Color.BLUE);
context.fillRect(0,0,100,100);
…
…
稍后我想将路径中的像素重置为透明
context.setStroke(Color.TRANSPARENT);
context.beginPath();
context.moveTo(0, 0);
context.lineTo(10,10);
…
context.stroke();
但是,由于应用了混合,这不起作用。在其他渲染库中,可以使用例如上面提到的混合/合成方法之一来实现这一点,但直到现在我无法在 javafx 中识别出这样的功能。
【问题讨论】:
-
您想要实现什么,它在图像示例中的外观如何?要么你有路径节点并设置不透明度,要么你没有,你用背景颜色重绘路径。
-
我已经用更多细节编辑了这个问题,试图让问题更清晰
-
但是当你在画布上用透明颜色作画时,你会期待什么?它不会有任何影响。只需将其涂上背景颜色即可。我怀疑你想要的是不同的层次。这不是单个 Canvas 的含义。
-
请看关于How to work with Canvas的文章。
-
画布只是层次结构中的一个节点,我想将一些像素设置回透明,以使该区域中的较低层可见。由于这是其他 Canvas 实现中的常见操作,我很好奇 javafx 中是否没有办法实现这一点。例如HTML5 Canvas 例如Android Canvas
标签: javafx javafx-8 graphicscontext