1

NDK 部分から、または NDK 部分で次のコードを使用したいと思います。

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 コードのグローバル変数です。

どうもありがとうございます

4

1 に答える 1

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 にエラー メッセージはありません。メソッド「compress」を呼び出すとアクティビティが終了します。

お手伝いありがとうございます。

于 2012-12-09T21:39:34.860 に答える