如何将JavaFX形状与不同颜色结合在一起?

时间:2018-07-11 12:51:59

标签: javafx-8

在我的JavaFX应用程序中,我必须绘制一个大内存位图并提供缩放功能。位可以通过(绿色)或失败(红色)。我开始使用转换为JavaFX ImageView的java.awt.image.BufferedImage进行工作,但是我无法以较大的缩放因子在相邻的通过/失败位边界上获得像素的清晰像素表示。然后,我尝试使用Canvas,但偶然发现相邻颜色的同一模糊图像问题。最终,我发现即使使用较大的缩放倍数,Shape对象仍然保持像素清晰,但是我必须管理的Shapes数量如此之大,以至于我的应用程序因OutOfMemoryError而停止(添加到Group children列表中的对象太多)。 我对Shape.union进行了一些实验,但是我丢失了位通过/失败颜色信息。

有没有一种组合形状的方法可以满足我的要求:内存使用,颜色控制和...执行时间?

    Bit[][] bits = ...;

    Group root = new Group();

    Shape rect = new Rectangle(0.0, 0.0, width, height);
    rect.setFill(javafx.scene.paint.Color.GREEN);
    root.getChildren().add(rect);

    for (int x = 0; x < width; x++)
    {
        for (int y = 0; y < height; y++)
        {
            Line line = new Line(x + 0.5f, y + 0.5f, x + 0.5f, y + 0.5f);

            if (!bits[y][x].getStatus())
            {
                line.setStroke(javafx.scene.paint.Color.RED);
            }
            else if (bits[y][x].getNature() == BitNature.ECC)
            {
                line.setStroke(javafx.scene.paint.Color.BLUE);
            }
            root.getChildren().add(line);
        }
    }

0 个答案:

没有答案