在我的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);
}
}