안드로이드에서 영상처리를 하려고 합니다.
Bitmap 을 불러와서 int [ ] 로 만든다음에 이걸 native code에 전달해서 영상처리를 하려고 하는데요,
구현 파일을
#include "BitmapNdk.h"
#include <jni.h>
void Java_android_ndk_BitmapTest_BitmapNdk_Binary(JNIEnv *env, jobject thiz, jintArray data)
{
jint *buf = 0;
jsize len = (*env)->GetArrayLength(env, data);
int i;
buf = (*env)->GetIntArrayElements(env, data, 0);
for(i=0; i<len; i++){
if(buf[i] <= 0xFFAAAAAA)
buf[i] = 0xFF000000;
else
buf[i] = 0xFFFFFFFF;
}
(*env)->ReleaseIntArrayElements(env, buf, 0);
}
이렇게 만들었습니다.
그냥 Hello 찍는 예제는 잘 돌아가는 것으로 봐서 빌드상의 오류나.. 그런건 없는 것 같은데요.
디버그 해보면 자꾸 UnsatisfiedLinkError 가 발생하네요.
09-04 03:41:59.654: WARN/dalvikvm(580): No implementation found for native Landroid/ndk/BitmapTest/BitmapNdk;.Binary ([I)V
09-04 03:42:01.193: ERROR/AndroidRuntime(580): FATAL EXCEPTION: main
09-04 03:42:01.193: ERROR/AndroidRuntime(580): java.lang.UnsatisfiedLinkError: Binary
09-04 03:42:01.193: ERROR/AndroidRuntime(580): at android.ndk.BitmapTest.BitmapNdk.Binary(Native Method)
09-04 03:42:01.193: ERROR/AndroidRuntime(580): at android.ndk.BitmapTest.BitmapTestActivity.onCreate(BitmapTestActivity.java:54)
09-04 03:42:01.193: ERROR/AndroidRuntime(580): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
09-04 03:42:01.193: ERROR/AndroidRuntime(580): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
09-04 03:42:01.193: ERROR/AndroidRuntime(580): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
09-04 03:42:01.193: ERROR/AndroidRuntime(580): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
09-04 03:42:01.193: ERROR/AndroidRuntime(580): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
09-04 03:42:01.193: ERROR/AndroidRuntime(580): at android.os.Handler.dispatchMessage(Handler.java:99)
09-04 03:42:01.193: ERROR/AndroidRuntime(580): at android.os.Looper.loop(Looper.java:123)
09-04 03:42:01.193: ERROR/AndroidRuntime(580): at android.app.ActivityThread.main(ActivityThread.java:4627)
09-04 03:42:01.193: ERROR/AndroidRuntime(580): at java.lang.reflect.Method.invokeNative(Native Method)
09-04 03:42:01.193: ERROR/AndroidRuntime(580): at java.lang.reflect.Method.invoke(Method.java:521)
09-04 03:42:01.193: ERROR/AndroidRuntime(580): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
09-04 03:42:01.193: ERROR/AndroidRuntime(580): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
09-04 03:42:01.193: ERROR/AndroidRuntime(580): at dalvik.system.NativeStart.main(Native Method)
제 생각에는 JNI 함수나.. C 코드에서 틀렸으면 적어도 다른 에러가 발생 할 것 같아서요.
조언 부탁드립니다. ㅠ
아, 그리고 혹시 안드로이드에서 영상처리 하려고 할 때, 이 방법 말고 다른 좋은 방법 있으면 좀 알려주세요. ^^;