我需要转换一个void *,它将有一个位图数据。 void *是从cpp函数返回的,我需要做的是将这个void *转换为Jni,并将其显示为Java中的位图。将void *转换为字节数组
Void * buffer = CppClass->getbuffer();
ByteArray byte[];
byte = void *的内容;
我需要转换一个void *,它将有一个位图数据。 void *是从cpp函数返回的,我需要做的是将这个void *转换为Jni,并将其显示为Java中的位图。将void *转换为字节数组
Void * buffer = CppClass->getbuffer();
ByteArray byte[];
byte = void *的内容;
由于java没有void*
而jni没有ByteArray
,所以你不清楚你的执行环境是什么。
由于问题的根源是void *像素映射,因此我会假设您想要创建一个带有像素的Java Bitmap对象,并结合使用JNI和Java代码。
首先看Bitmap类,有一个方便的函数名为copyPixelsFromBuffer
,看起来很有用,它需要一个Buffer。
其次,看看JNI函数NewDirectByteBuffer,它需要一个C指针并创建一个ByteBuffer
,这也是Bitmap
所需的缓冲区。
现在它变得清晰,你只需要:
ByteBuffer
返回ByteBuffer
到Java土地Bitmap
这样的ByteBuffer
。ImageView
或您的油漆程序显示。P.S.留给OP的处理对象引用是GC友好的。
感谢您的快速回复。 void *是从JPEG数据的cpp图层返回的,我通过Jni需要Java图层中的图像数据。 – iGo 2014-09-19 14:09:57
Java不处理void *,你得到的最接近的是一个长整数来存放指针地址,但严格来说它是UD。我上面提出的建议是将ByteBuffer传递给java,并在java端创建Bitmap,这比用JNI创建一个调用大量Java对象方法的Bitmap不那么麻烦。 – 2014-09-19 14:13:08
如果我从Jni返回ByteBuffer到java端,我可以使用哪种类型的返回类型作为JNI函数。 – iGo 2014-09-19 14:28:07
你应该学习c/C++基础知识... reinterpret_cast应该有帮助 – Selvin 2014-09-19 13:50:18
你知道这个缓冲区有多大吗?更重要的是,它包含多少有效数据? – Deduplicator 2014-09-19 13:53:42
我试图将void *投射到jbytearray。但在Android端,我需要Byte []。 – iGo 2014-09-19 13:55:38