gpt4 book ai didi

image - 将 JavaFX Image 对象转换为字节数组

转载 作者:行者123 更新时间:2023-12-04 18:03:19 30 4
gpt4 key购买 nike

我们可以通过使用创建 FX Image 对象

byte [] bytes = ------; //valid image in bytes
javafx.scene.image.Image image = new Image(new ByteArrayInputStream(bytes));

这可以设置为 ImageView。

我需要相反的 没有 首先将其转换为 缓冲图像 (SwingFXUtils.fromFXImage(image,null))。

这样我就可以直接将字节写入文件。

我尝试了以下方法:
PixelReader pixelReader = image.getPixelReader();
int width = (int)image.getWidth();
int height = (int)image.getHeight();
byte[] buffer = new byte[width * height * 4];
pixelReader.getPixels(
0,
0,
width,
height,
PixelFormat.getByteBgraInstance(),
buffer,
0,
width * 4
);

但是通过写入 生成的文件字节 [] 缓冲区 不是有效图像。

对此有何见解?

编辑: How to get byte[] from javafx imageView 中给出的解决方案不能应用于我的问题。正如我已经明确提到的,我不想使用 SwingFXUtils 将其转换为 BufferedImage。
此外,我想将其转换为字节数组,以便将其写入图像文件。

最佳答案

这是稍后,但如果有人想知道,试试这个:

// Load the Image into a Java FX Image Object //

Image img = new Image(new FileInputStream("SomeImageFile.png") );

// Cache Width and Height to 'int's (because getWidth/getHeight return Double) and getPixels needs 'int's //

int w = (int)img.getWidth();
int h = (int)img.getHeight();

// Create a new Byte Buffer, but we'll use BGRA (1 byte for each channel) //

byte[] buf = new byte[w * h * 4];

/* Since you can get the output in whatever format with a WritablePixelFormat,
we'll use an already created one for ease-of-use. */

img.getPixelReader().getPixels(0, 0, w, h, PixelFormat.getByteBgraInstance(), buf, 0, w * 4);

/* Second last parameter is byte offset you want to start in your buffer,
and the last parameter is stride (in bytes) per line for your buffer. */

关于image - 将 JavaFX Image 对象转换为字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38095984/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com