想要将org.bytedeco.javacpp.lept.PIX转换为byte []和缓冲的图像

时间:2019-02-06 06:56:43

标签: java arrays image-processing bufferedimage leptonica

我想编写一个实用程序,将org.bytedeco.javacpp.lept.PIX转换为byte[]BufferedImage。我尝试了以下方法:

1)使用Java2DFrameUtils,但是它将代码反转我的图像颜色(1-> 0和0-> 1):

LeptonicaFrameConverter c = new LeptonicaFrameConverter();
 Frame f = c.convert(src);
 BufferedImage img = Java2DFrameUtils.toBufferedImage(f);

2)this方法不使用org.bytedeco.javacpp软件包,因此对我没有帮助。

3)当我尝试使用此软件包的PointerPointerSizeTPointer时,出现错误提示

"Error in pixWriteMem: &data not defined".

这是我的代码:

    PointerPointer pp = new PointerPointer();
    SizeTPointer psize = new SizeTPointer();
    lept.pixWriteMem(pp, psize, src, lept.IFF_TIFF);
    byte[] by = pp.asByteBuffer().array();
    BufferedImage img = ImageIO.read(new ByteArrayInputStream(by));

任何帮助将不胜感激。 TIA。

1 个答案:

答案 0 :(得分:1)

我想我来晚了。但是如果将来有人到达此职位,这就是我如何处理此问题。

问题在于~$ sort times.txt | head 189.992000 190.092000 190.720000 194.402000 195.250000 195.746000 195.847000 195.964000 196.256000 196.420000 ~$ sort times.txt | tail 203.746000 203.824000 203.900000 204.026000 204.273000 205.625000 205.634000 208.974000 210.202000 210.227000 ~$ buffer都没有初始化。 因此,我使用psize作为缓冲区的大小,调用0返回pixWriteMem指针中的缓冲区大小。然后使用预期大小的缓冲区再次调用psize

警告:如果您使用非常大的图像,请检查pixWriteMem调用中潜在的问题!

如果出现问题,并且toInt()gotSize总是不一样,这可能会导致带有StackOverFlow异常的无限循环。

示例代码在Kotlin中。

size