gpt4 book ai didi

java - 如何直接使用ByteBuffer

转载 作者:行者123 更新时间:2023-11-30 15:29:07 25 4
gpt4 key购买 nike

我需要通过 JNI 将数据缓冲区从 C 传递到 Java。因此,在 C 中创建了一个直接的 ByteBuffer 并将其发送到 Java:

void *myBuffer = ...;
int w = ..., h = ...;

jmethodID func = ...;
jobject directBuffer = jni_env->NewDirectByteBuffer(myBuffer, w * h);
jni_env->CallVoidMethod(myActivity, func, directBuffer, w, h);

Java端,我成功收到了该缓冲区,但我无法使用它!

public static final void Func(final java.nio.ByteBuffer pixels, int w, int h) {
boolean ok = pixels.hasArray();
if (ok)
{
java.nio.IntBuffer i_pixels = pixels.asIntBuffer();
final int[] apixels = i_pixels.array();
Bitmap bm = Bitmap.createBitmap(apixels, w, h, Bitmap.Config.ARGB_8888);
}
// ...
}

第一行 (boolean ok = Pixels.hasArray();) 只是因 UnsupportedOperationException 而崩溃。

如您所见,我需要将接收到的缓冲区转换为 int[] 以便将其传递给 Bitmap.createBitmap。我做错了什么以及如何实现我需要的?

最佳答案

因为它是 native 托管数组,所以您需要通过 get 函数访问它,例如 getInt()

参见:https://groups.google.com/forum/#!topic/android-ndk/yNXuiQkGXPY

关于java - 如何直接使用ByteBuffer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26340422/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com