Java 从ByteBuffer.array()解码数据时,BitmapFactory.decodeByteArray返回null

Java 从ByteBuffer.array()解码数据时,BitmapFactory.decodeByteArray返回null,java,android,bitmap,bitmapfactory,Java,Android,Bitmap,Bitmapfactory,我正在解码来自ByteBuffer的数据,比如:BitmapFactory.decodeByteArray(inputData.array(),0,inputData.limit()) 同样的代码在较旧的Android上运行良好(例如4.3),但在Android 7上,我得到错误“D/skia(14391):--SkImageDecoder::Factory returned null”,返回的图像为null 从jpg文件正确加载图像数据。此外,ByteBuffer具有正确的位置和限制 我阅读了

我正在解码来自ByteBuffer的数据,比如:
BitmapFactory.decodeByteArray(inputData.array(),0,inputData.limit())

同样的代码在较旧的Android上运行良好(例如4.3),但在Android 7上,我得到错误
“D/skia(14391):--SkImageDecoder::Factory returned null”
,返回的图像为null

从jpg文件正确加载图像数据。此外,ByteBuffer具有正确的位置和限制


我阅读了大多数与BitmapFactory.decodeByteArray相关的类似问题,但似乎没有一个与我的场景类似

如果我首先将字节缓冲区中的数据读取到数组中,然后提供此数据,
BitmapFactory.decodeByteArray
似乎能够正确解码图像。我错过了备份数组中ByteBuffer数据实际开始的偏移量

因此正确的代码应该是:

Bitmap im =  BitmapFactory.decodeByteArray(inputData.array(), inputData.arrayOffset(), inputData.limit());

似乎如果我首先将字节缓冲区中的数据读取到数组中,然后提供此数据,
BitmapFactory.decodeByteArray
能够正确解码图像。我错过了备份数组中ByteBuffer数据实际开始的偏移量

因此正确的代码应该是:

Bitmap im =  BitmapFactory.decodeByteArray(inputData.array(), inputData.arrayOffset(), inputData.limit());