簡體   English   中英

從C ++創建android.graphics.Bitmap

[英]Creating an android.graphics.Bitmap from C++

我有一些基於NDK的C ++代碼需要構建一個android位圖對象。 我確信有一種方法可以直接從C ++代碼執行此操作,但這不是最簡單的事情;)

所以我想調用的方法是

Bitmap.createBitmap( width, height, Bitmap.Config.ARGB_8888 );

所以要從本機代碼執行此操作,我需要執行以下步驟。

  • 找到類(android.graphics.Bitmap)。
  • 獲取“createBitmap”的靜態方法ID。
  • 創建枚舉。
  • 調用靜態方法。

(最終我需要創建一個jintArray並傳入數據但我稍后會擔心)。

我在第2步和第3步很失落。 我的代碼目前看起來像這樣:

jclass      jBitmapClass        = gpEnv->FindClass( "android.graphics.Bitmap" );
jmethodID   jBitmapCreater      = gpEnv->GetStaticMethodID( jBitmapClass, "createBitmap", "(IILandroid/graphics/Bitmap/Config;)Landroid/graphics/Bitmap;" );

但后來我被困住了。 如何從本機C / C ++代碼創建枚舉?

我的最后一個參數是GetStaticMethodID正確嗎? 我不知道如何指定具體的對象,但我認為上述工作。 但是,枚舉可能是錯誤的!

提前致謝。

我的代碼中有這個,所以我可以給你答案。

1)獲取createBitmap的靜態方法id(int width,int height,Bitmap.Config config):

jclass java_bitmap_class = (jclass)env.FindClass("android/graphics/Bitmap");
jmethodID mid = env.GetStaticMethodID(java_bitmap_class, "createBitmap", "(IILandroid/graphics/Bitmap$Config;)Landroid/graphics/Bitmap;");

注意Bitmap.Config的簽名,它有$符號。

2)使用給定值為Bitmap.Config創建枚舉:

const wchar_t config_name[] = L"ARGB_8888";
jstring j_config_name = env.NewString((const jchar*)config_name, wcslen(config_name));
jclass bcfg_class = env.FindClass("android/graphics/Bitmap$Config");
jobject java_bitmap_config = env.CallStaticObjectMethod(bcfg_class, env.GetStaticMethodID(bcfg_class, "valueOf", "(Ljava/lang/String;)Landroid/graphics/Bitmap$Config;"), j_config_name);

這里我們從命名值創建Bitmap.Config枚舉。 另一個可能的值字符串是“RGB_565”。

3)調用createBitmap:

java_bitmap = env.CallStaticObjectMethod(java_bitmap_class, mid, w, h, java_bitmap_config);

枚舉在編譯時映射到Java類。

此示例可能對您有所幫助:

http://mike-java.blogspot.com/2008/05/java-enum-in-java-native-interface-jni.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM