gpt4 book ai didi

java - 纯JavaFX : convert Image to bytes Array (+ opposit operation). 出了什么问题?

转载 作者:行者123 更新时间:2023-12-02 03:39:28 25 4
gpt4 key购买 nike

用户可以浏览到图像文件。我想将选定的文件保存到 BLOB 列中的数据库(derby db)。为此,我需要将 Image 对象转换为字节数组 (byte[]),并检索它,我需要:byte[] -> Image。

所以我搜索并找到了这个:from this question

纯java fx解决方案trace(==你必须填写缺失的点:)

Image i = logo.getImage();
PixelReader pr = i.getPixelReader();
PixelFormat f = pr.getPixelFormat();

WriteablePixelFromat wf = f.getIntArgbInstance(); //???

int[] buffer = new int[size as desumed from the format f, should be i.width*i.height*4];

pr.getPixels(int 0, int 0, int i.width, i.height, wf, buffer, 0, 0);

我是这样实现的:

private ImageByteInfo imageToByteArray(Image i){
PixelReader pr = i.getPixelReader();
WritablePixelFormat<ByteBuffer> wf = PixelFormat.getByteBgraInstance();

byte[] buffer = new byte[(int) (i.getWidth() * i.getHeight() *4)];

pr.getPixels(0, 0, (int) i.getWidth(), (int) i.getHeight(), wf, buffer, 0, 0);

return new ImageByteInfo(buffer, (int) i.getWidth(), (int) i.getHeight()) ;
}

除了当我调查缓冲区数组时。我发现只有前 4096 个条目是有效的(有数字),数组的其余部分都是 0 0 0 0 0 0。

那么我该如何解决这个问题呢?谢谢。

这是从不固定数组中检索图像的方法。这是否正确?

private Image byteArrayToImage(ImageByteInfo imageArray){

WritablePixelFormat<ByteBuffer> wf = PixelFormat.getByteBgraInstance();

WritableImage writableimage = new WritableImage(imageArray.getWidth(), imageArray.getHeight());

PixelWriter pixelWriter = writableimage.getPixelWriter();

pixelWriter.setPixels(0, 0, imageArray.getWidth(), imageArray.getHeight(), wf, imageArray.getByteImage(), 0, 0);

return writableimage;
}

注意:对文件系统存储不感兴趣,并且它需要是纯 JavaFX(无 Swing 或 AWT)

最佳答案

pr.getPixels(0, 0, (int) i.getWidth(), (int) i.getHeight(), wf, buffer, 0, 0);

最后一个参数(scanlineStride)是当您从图像中的一行前进到下一行时数组的偏移量。由于您将其设置为零,因此您不会增加数组索引,并且实际上只写入数组的一“行”。

由于此格式每个像素使用 4 个字节,因此您需要 4*imageArray.getWidth() 的扫描线步幅:

pr.getPixels(0, 0, (int) i.getWidth(), (int) i.getHeight(), wf, buffer, 0, 4*imageArray.getWidth());

同样,

pixelWriter.setPixels(0, 0, imageArray.getWidth(), imageArray.getHeight(), wf, imageArray.getByteImage(), 0, 4*imageArray.getWidth());

关于java - 纯JavaFX : convert Image to bytes Array (+ opposit operation). 出了什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37008675/

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