【问题标题】:How to extract a subimage using PixelReader and JavaFX?如何使用 PixelReader 和 JavaFX 提取子图像?
【发布时间】:2018-10-20 19:57:50
【问题描述】:

我有一个 .png 图像,我想使用 PixelReader 类提取该图像的一部分,并将其重建为图像:

Image image = new Image("file:ressources/spritesheets/Zelda_Overworld.png");
byte[] buffer = new byte[1024];
PixelReader pr = image.getPixelReader();
pr.getPixels(0, 0, 16, 16, PixelFormat.getByteBgraInstance(), buffer, 0, 64);
Image tile = new Image(new ByteArrayInputStream(buffer));

我可以显示 image 并且 buffer 似乎包含值,但是我无法显示 tile,tile.getPixelReader() 返回 null , tile.getWidth() 和 tile.getHeight() 返回 0.0。

你知道我做错了什么吗?

保罗

【问题讨论】:

    标签: java image javafx


    【解决方案1】:

    WritableImage为你做这件事:

    Image image = new Image("file:ressources/spritesheets/Zelda_Overworld.png");
    Image tile = new WritableImage(image.getPixelReader(), x, y, width, height);
    

    根据tile 的使用情况,可能根本不需要这样做。 ImageView 有一个viewport property 允许您选择要显示的图像部分,GraphicsContext 提供了一个重载版本的drawImage 方法来将图像的一部分绘制到Canvas

    【讨论】:

    • 非常感谢!我不知道为什么其他解决方案不起作用,但是您的解决方案更简单并且效果很好。我使用图块来构建一些地图,所以我直接使用图像来进行最终显示,但是您直接从 spritesheet 中显示图块的解决方案看起来很有趣!
    猜你喜欢
    • 2016-07-04
    • 1970-01-01
    • 2018-08-26
    • 2016-07-03
    • 2021-06-12
    • 1970-01-01
    • 2012-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多