Создание android.graphics.Bitmap из C ++

У меня есть некоторый код на C ++, основанный на NDK, который должен построить объект bitmap андроида. Я уверен, что есть способ сделать это прямо из кода на C ++, но это не самый простой способ сделать;)

Поэтому метод, который я хочу назвать,

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

Поэтому, чтобы сделать это из собственного кода, мне нужно сделать следующие шаги.

  • Найдите класс (android.graphics.Bitmap).
  • Получить идентификатор статического метода «createBitmap».
  • Создайте перечисление.
  • Вызовите статический метод.

(В конце концов мне нужно будет создать 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 (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