有人可以告诉我copyPixelsFromBuffer是否应该与切片缓冲区一起使用吗?
当我这样做时,我对下面的代码很感兴趣: TID 19021中的致命信号11(SIGSEGV),代码1(SEGV_MAPERR),故障加法器0xbfc8019c
由于我的位置是0,而我的arrayOffset如果不同于0,我想这个函数试图访问0索引,而没有从切片中获取arrayOffset的计数。如果创建一个新数组并将其包装在新的byteBuffer中,它将起作用。
这不起作用:
#include "jni_test_JNI_Test.h"
#include <iostream>
/*
* Class: jni_test_JNI_Test
* Method: createFoo
* Signature: (Ljava/lang/String;)Ljni_test/JNI_Test/Foo;
*/
JNIEXPORT jobject JNICALL Java_jni_1test_JNI_1Test_createFoo
(JNIEnv* env, jclass fooClass, jstring bar) {
jobject result = env->AllocObject(fooClass);
jfieldID barField = env->GetFieldID(fooClass, "bar", "Ljava/lang/String;");
env->SetObjectField(result, barField, bar);
return result;
}
这有效:
Buffer buffer = something coming from ByteBuffer.slice();
bitmap = Bitmap.createBitmap(getWidth(), getHeight(), bitmapConfig);
bitmap.copyPixelsFromBuffer(buffer);
第二种方法有效,但是过度工作和过度使用内存。是否有另一个从切片的byteBuffer创建位图?
谢谢