我需要转换一个带有位图数据的 void * 。 void* 是从 cpp 函数返回的,我需要做的是转换这个传递给 Jni 的 void* 并在 Java 中将其显示为位图。
Void * buffer = CppClass->getbuffer();
ByteArray byte[];
byte = void* 的内容;
最佳答案
由于java没有void*
,jni没有ByteArray
,所以不清楚你的执行环境是什么。
由于问题的根源是 void* 像素图,我假设您想要使用 JNI 和 Java 代码的混合来创建一个包含像素的 java Bitmap 对象。
首先看Bitmap类中,有一个名为 copyPixelsFromBuffer
的方便函数,看起来很有用,它需要一个 Buffer .
二、看JNI函数NewDirectByteBuffer ,它接受一个C指针并创建一个ByteBuffer
,这也是Bitmap
需要的Buffer。
现在很清楚了,您只需要:
- 使用 JNI 代码创建带有像素缓冲区的
ByteBuffer
- 将
ByteBuffer
传递/返回到 Java 空间 - 用这样的
ByteBuffer
填充位图
。 - 使用
ImageView
或您的绘画例程显示它。
附注OP 负责处理对象引用以使其对 GC 友好。
关于android - 将 void* 转换为字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25935515/