JNI에서 C
에서 Java
까지 데이터 버퍼를 전달해야합니다. 그래서 C
에서 직접 ByteBuffer
을 작성 Java
에 보낸 :직접 ByteBuffer 사용 방법
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
으로 전달해야합니다. 내가 뭘 잘못하고 어떻게하면 될 수 있니? 그 때문에
이 비트 보이기 :'jmethodID func = ...;' – weston
또한 "Java 측에서 성공적으로 버퍼를 받았습니다"라고 어떻게 알았습니까? – weston
@weston Debugger는'pixels'에 대한 올바른 버퍼 크기를 보여줍니다. 그리고'w'와'h'의 값도 정확합니다. 그 'func = ...'에는 아무런 문제가 없습니다. – Nick