我正在使用 JNA。我正在从我的 c++ 方法中获取原始数据的字节数组。现在我被困在如何使用这个原始数据字节数组在 java 中获取缓冲图像。我尝试了几件事来将其作为 tiff 图像,但我没有成功。这是我到目前为止尝试的代码。这里我的字节数组包含 16 位灰度图像的数据。我从 x-sensor 设备中获取这些数据。现在我需要从这个字节数组中获取图像。
第一次尝试
byte[] byteArray = myVar1.getByteArray(0, 3318000);//array of raw data
ImageInputStream stream1=ImageIO.createImageInputStream(newByteArrayInputStream(byteArray));
ByteArraySeekableStream stream=new ByteArraySeekableStream(byteArray,0,3318000);
BufferedImage bi = ImageIO.read(stream);
第二次尝试
SeekableStream stream = new ByteArraySeekableStream(byteArray);
String[] names = ImageCodec.getDecoderNames(stream);
ImageDecoder dec = ImageCodec.createImageDecoder(names[0], stream, null);
//at this line get the error ArrayIndexOutOfBoundsException: 0
RenderedImage im = dec.decodeAsRenderedImage();
我想我在这里失踪了。由于我的数组包含原始数据,因此它不包含 tiff 图像的标头。我对吗?如果是,那么如何在字节数组中提供此标头。最终如何从这个字节数组中获取图像?
为了测试我是否从我的本机方法中获得了正确的字节数组,我将此字节数组存储为 .raw 文件,并在 ImageJ 软件中打开此原始文件后,它会播下正确的图像,因此我的原始数据是正确的。我唯一需要的是如何将我的原始字节数组转换为图像字节数组?