我想编写一个实用程序,将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)当我尝试使用此软件包的PointerPointer
和SizeTPointer
时,出现错误提示
"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。
答案 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