Я новичок в этой теме.
Я использую NDK в своем приложении для Android и у меня есть такой метод в Java
static byte[] getBytes(Bitmap bitmap)
{
int size = bitmap.getRowBytes() * bitmap.getHeight();
ByteBuffer byteBuffer = ByteBuffer.allocate(size);
bitmap.copyPixelsToBuffer(byteBuffer);
return byteBuffer.array();
}
Теперь мне нужно использовать этот метод из NDK
На самом деле я написал что-то вроде этого
jbyteArray arr = env->CallStaticByteMethod(jniIds.helper_class, jniIds.get_bytes, image_obj);
Но проблема в том, CallStaticByteMethod
тип возврата jbyte
, но мне нужно jbyteArray
...
Итак, вопрос, какнаписать этот метод?
РЕДАКТИРОВАТЬ
jobject arr_obj = env->CallStaticObjectMethod(jniIds.helper_class, jniIds.get_bytes, image_obj);
jbyteArray arr = static_cast<jbyteArray>(arr_obj);
//my needed result
unsigned char myArr = reinterpret_cast<unsigned char>(arr);
РЕДАКТИРОВАТЬ
jbyteArray arr_obj = (jbyteArray) env->CallStaticObjectMethod(jniIds.helper_class, jniIds.get_bytes, image_obj);
Теперь у меня есть jbyteArray ...но в любом случае я не понимаю, как с помощью GetByteArrayElements
получить мой byte[]
в мою переменную unsigned char *i_image
?
РЕДАКТИРОВАТЬ
jbyteArray arr_obj = (jbyteArray)env->CallStaticObjectMethod(jniIds.helper_class, jniIds.get_bytes, image_obj);
jbyte *b = (jbyte *) env->GetByteArrayElements(arr_obj, NULL);
i_image = reinterpret_cast<unsigned char *>(b);
env->ReleaseByteArrayElements(arr_obj, b, JNI_ABORT);