Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
停止JavaFX LinearGradient中的不透明度_Java_Svg_Javafx_Javafx 8_Linear Gradients - Fatal编程技术网

停止JavaFX LinearGradient中的不透明度

停止JavaFX LinearGradient中的不透明度,java,svg,javafx,javafx-8,linear-gradients,Java,Svg,Javafx,Javafx 8,Linear Gradients,我有以下SVG文档: <?xml version="1.0" encoding="UTF-8" standalone="no"?> <svg id="svg602" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="324.02335" height="689

我有以下SVG文档:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg id="svg602"
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns="http://www.w3.org/2000/svg"
   xmlns:xlink="http://www.w3.org/1999/xlink"
   width="324.02335" height="689.724"
   space="preserve" version="1.0">

  <defs id="defs604">
    <linearGradient id="linearGradient3034">
      <stop id="stop3035" offset="0"
            style="stop-color:#0000ff;stop-opacity:1" />
      <stop id="stop3036" offset="1"
            style="stop-color:#ffffff;stop-opacity:0;" />
    </linearGradient>
    <linearGradient id="linearGradient3542"
       xlink:href="#linearGradient3034"
       x1="10" y1="10"
       x2="210" y2="210"
       gradientUnits="userSpaceOnUse" />
  </defs>

  <rect id="r1" x="10" y="10" width="200" height="200"
        style="fill:url(#linearGradient3542);stroke:none" />
</svg>
但是,SVG的呈现方式(在Inkscape中)如下所示:

JavaFX场景的渲染方式如下:

显然,JavaFX不考虑第二个停止的停止不透明度(0.0)(如果我在SVG文件中将不透明度设置为1.0,它将像JavaFX场景一样渲染)

我错过什么了吗?还是应该把它看作是一个bug?< /P>
除了JavaFX中的1.0之外,还有其他解决方案可以实现Stop的不透明度吗?

您确实发现了一个bug,但不在不透明度中

我首先检查了不透明度是否有效。例如,您可以在矩形下方放置一些标签,您将看到它,因此这不是问题所在

然后我将图像导出为png,并对其进行编辑。我发现从左上角到右下角,不透明度从1到0进行了很好的插值

令我惊讶的是,红色和绿色在每个像素上都是0

试图找到一个报告的bug,我没有发现任何bug,但我想到了使用不同的渲染管道

使用
-Dprism.order
和选项
d3d
(Windows)、
es2
(Mac)和
sw
,所有这些都给出了相同的错误结果。但是旧的和不推荐的
j2d
在Windows上运行良好

为了检查它,我稍微修改了您的代码:

public void start(Stage primaryStage) {
    Group mainGroup = new Group();
    Rectangle r = new Rectangle(0, 0, 200, 200);

    Stop[] stops = new Stop[] { new Stop(0, new Color(0.0, 0.0, 1.0, 1.0)), 
                                new Stop(1, new Color(1.0, 1.0, 1.0, 0.0)) };
    LinearGradient lg = new LinearGradient(0, 0, 1, 1, true, CycleMethod.NO_CYCLE, stops);
    r.setFill(lg);

    mainGroup.getChildren().add(r);
    Scene scene = new Scene(mainGroup, 200, 200);
    scene.setFill(Color.TRANSPARENT);
    primaryStage.setScene(scene);
    primaryStage.show();

    WritableImage image = scene.snapshot(null);
    PixelReader pixelReader = image.getPixelReader();

    System.out.println("Color: " + pixelReader.getColor((int)image.getWidth()/2, (int)image.getHeight()/2));
}
使用常规管道运行时,您将看到以下结果:

Color: 0x0000ff7f
并且仅使用
-Dprism.order=j2d运行时,您将获得:

Color: 0x7e7eff7f
正如我前面提到的,不透明度是插值的,但不是RGB颜色:在这种情况下,RGB似乎是从第一站开始的颜色


因此,我们可能会在某个时候想到应该报告的回归。

感谢您的报告
Color: 0x7e7eff7f