Подтвердить что ты не робот

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

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

Таким образом, метод, который я хочу вызвать,

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/С++?

Кроме того, мой последний параметр в GetStaticMethodID правильный? Я не был уверен, как указать конкретные объекты, но я думаю, что это работает. Возможно, ошибаюсь в перечислении, но!

Спасибо заранее.

4b9b3361

Ответ 1

У меня это в моем коде, поэтому я могу дать вам ответ, который работает.

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);