2012-12-07 37 views
1

我想在NDK部分使用以下代码。使用NDK调用函数压缩(Android)

OutputStream fOut = new FileOutputStream(file); 
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fOut); 
fOut.flush(); 
fOut.close(); 

我开始编码NDK的功能是这样的:

void compress(JNIEnv* env, jobject fOut){ 

    jclass bitmapCompressFormat = (*env)->FindClass(env,"android/graphics/Bitmap$CompressFormat"); 
    jfieldID CFFieldID = (*env)->GetStaticFieldID(env,bitmapCompressFormat, "JPEG","Landroid/graphics/Bitmap$CompressFormat;"); 
    jobject CFObj = (*env)->GetStaticObjectField(env,bitmapCompressFormat, CFFieldID); 

} 

但我坚持,我应该使用CallObjectMethod?

PS:位图是NDK代码中的全局变量。

非常感谢你

回答

0

这是最后的更新版本:

jobject bitmap_array[10]; 

void compress(JNIEnv* env, jobject *fOut){ 

jclass bitmapCompressFormat = (*env)->FindClass(env,"android/graphics/Bitmap$CompressFormat"); 
jfieldID CFFieldID = (*env)->GetStaticFieldID(env,bitmapCompressFormat, "JPEG","Landroid/graphics/Bitmap$CompressFormat;"); 
jobject CFObj = (*env)->GetStaticObjectField(env,bitmapCompressFormat, CFFieldID); 

jmethodID compressBitmapMethodID = (*env)->GetMethodID(env,bitmap_array[0],"compress","(Landroid/graphics/Bitmap$CompressFormat;ILjava/io/OutputStream;)Z"); 

(*env)->CallBooleanMethod(env,bitmap_array[0], compressBitmapMethodID, CFObj, (jint)100, *fOut); 

} 

--------------------- SDK -------------------------- 
public native void compress(OutputStream fOut); 
... 
OutputStream fOut = new FileOutputStream(file); 
compress(fOut); 

我在logcat的没有错误消息,当我打电话的方法“压缩”活动关闭。

感谢您的帮助。