【问题标题】:The fastest filling one pixel in JavaFXJavaFX中最快的填充一个像素
【发布时间】:2015-06-09 19:15:27
【问题描述】:

我在 JavaFX 库中使用画布。我需要尽可能快地绘制许多像素。我执行这个:

canvas.getGraphicsContext2D().setFill(color);
canvas.getGraphicsContext2D().fillRect(x, y, 1, 1);

我想它很慢。我可以使用更快的方式吗?也许我应该使用另一种方式/方法来填充一个像素?

【问题讨论】:

  • 您是仅在画布上绘制像素还是同时使用其他画布 API?
  • 我使用默认画布:javafx.scene.canvas.Canvas
  • 我知道你使用画布,但我正在努力解决你是否应该这样做。如果您所做的只是操纵像素,则不需要画布,WritableImage 就足够了,并且可能会表现得更好。如果你在画布上做其他事情,比如在画布上画线,那么你需要一个画布。
  • 我实现了诸如 z-buffer、phong shading 等算法,可以将我的 3D 对象转换为 2D 图像。
  • canvas performance 上查看此主题。将 PixelWriter 用于具有普通 ImageView 的图像可能最适合您的情况。如果我有时间,我会发布一个答案,但与此同时,任何人都可以根据 cmets 和链接线程组合一个答案。对于您正在寻找的画布graphicsContext.getPixelWriter()

标签: java canvas javafx


【解决方案1】:

您可以使用图像中的 PixelWriter。 正如@jewelsea 所说,使用canvas.getGraphicsContext2D().getPixelWriter()

使用 PixelWriter,您可以绘制任何您想要的像素:

pixelWriter.setColor(int x, int y,Color c)

我认为这是仅绘制像素的最佳方式。

您也可以放弃 Canvas 并使用 ImageView 和 WriteAbleImage。

在这种情况下,您可以使用 writableImage.getPixelWriter() 与画布相同。

如果这仍然很慢,您可以在后台线程中执行 pixelWriter.setColor(..),这样应用程序就不会停止。

另见:

canvas performance

希望这个回答对你有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-25
    • 1970-01-01
    • 1970-01-01
    • 2021-05-04
    • 2018-11-22
    • 2021-05-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多