【发布时间】:2017-09-27 09:47:41
【问题描述】:
public class Loader {
public static byte[] loadImage(String path) {
Image image;
try {
image = new Image(new FileInputStream(path));
int width = (int) image.getWidth();
int height = (int) image.getHeight();
byte[] data = new byte[width * height * 4];
image.getPixelReader().getPixels(0, 0, width, height, PixelFormat.getByteBgraPreInstance(), data, 0, width * 4);
return data;
}catch(IOException e) {
e.printStackTrace();
System.exit(-1);
}
return null;
}
}
@Override
public void render(GraphicsContext gc) {
gc.clearRect(0, 0, width, height);
gc.getPixelWriter().setPixels(x++, 0, 819 ,720, PixelFormat.getByteBgraPreInstance(), data, 0, 819*4);
gc.getPixelWriter().setPixels(400, 0,819 ,720, PixelFormat.getByteBgraPreInstance(), data, 0, 819*4);
}
您好,目前我在使用 JavaFx 的 PixelWriter/PixelReader 时遇到问题。我尝试从图像中读取像素并将其存储在缓冲区中,之后我想将其渲染到屏幕上。但是图像现在不包含 Alpha 值,因此也没有透明像素。我在互联网上搜索了几个小时,但找不到答案。可能格式有问题。 提前致谢。
【问题讨论】:
-
格式很可能有问题。在
Image类支持的 4 种格式中,只有两种具有定义透明度的机制 - GIF,可能具有透明颜色(因此 alpha=1 或 alpha=0),以及可能包含完整 alpha 通道的 PNG。如果您正在阅读 BMP 或 JPG 文件,您将没有 alpha 值。即使在读取 PNG 文件时,如果原始文件没有 alpha 通道,您也不会看到不同像素的 alpha 有任何变化。 -
已经检查了 PNG 文件,它有一个 Alpha 通道。忘了说我只知道阅读带有 Alpha 通道的图像。但无论如何谢谢。
标签: java javafx rendering pixel pixels