JNI 呼び出しでビットマップを作成できます。
// setup bitmap class
jclass bitmap_class = (jclass)env->FindClass ("android/graphics/Bitmap");
// setup create method
jmethodID bitmap_create_method = env->GetStaticMethodID (bitmap_class, "createBitmap", "(IILandroid/graphics/Bitmap$Config;)Landroid/graphics/Bitmap;");
// get_enum_value return jobject corresponding in our case to Bitmap.Config.ARGB_8888. (the implentation is irrelevant here)
jobject bitmap_config_ARGB = get_enum_value ("android/graphics/Bitmap$Config", "ARGB_8888");
// Do not forget to call DeleteLocalRef where appropriate
// create the bitmap by calling the CreateBitmap method
// Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
jobject bitmap = env->CallStaticObjectMethod (bitmap_class, bitmap_create_method, width, height, bconfig);
// at the end of course clean-up must be done
env->DeleteLocalRef (bitmap);
の API を介して、いくつかのビットマップ プロパティと生のピクセルにアクセスできます。android/bitmap.h
AndroidBitmap_getInfo
ARGB_8888
形式 (またはアルファのみ)、寸法、歩幅、またはピッチに関する情報を提供します。
AndroidBitmap_lockPixels
生のピクセルを与えます。ピクセルの操作が終了したら、呼び出す必要がありますAndroidBitmap_unlockPixels
作るfill (color, dimension)
JNI がお手伝いします。これは、JNI 呼び出しを介して記述できます (Java を使用します。これは、記述が簡単で読みやすいためです)。
canvas.save ();
canvas.setBitmap (bitmap);
canvas.clipRect (left, top, right, bottom, Region.Op.REPLACE);
canvas.drawColor (color, PorterDuff.Mode.SRC);
canvas.restore ();
あるビットマップを別のビットマップにコピーするには -copy (src_bitmap, src_rect, dest_rect)
canvas.save ();
canvas.setBitmap (dest_bitmap);
canvas.clipRect (left, top, right, bottom, Region.Op.REPLACE);
canvas.drawBitmap (src_bitmap, src_rect, dest_rect, null);
canvas.restore ();