当前位置: 首页 > 面试题库 >

从C ++创建一个android.graphics.Bitmap

子车青青
2023-03-14
问题内容

我有一些基于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宽度,int高度,Bitmap.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);


 类似资料:
  • 问题内容: 我想一个拆分成的基础上的内容。结果将包含原始流数据的一部分。 我的实际应用程序更加复杂(将时间间隔列表中的日志行分组),但是我的问题是如何处理流,因此在这里我问一个简化的示例。 我希望能够基于重复的相同数字将a拆分为一个,而仅将流保留为奇数。 例如,以下流包含: 需要产生包含以下内容的流: 通过使用过滤器开始(或结束),可以省去偶数: 这是不希望的,因为这意味着对每个输入值进行两次评估

  • 问题内容: 我想编写一个检查目录是否存在的程序;如果该目录不存在,那么它将在其中创建目录和一个日志文件,但是如果该目录已经存在,则它将在该文件夹中创建一个新的日志文件。 我如何在Linux中用C做到这一点? 问题答案: 看看检查,如果该目录存在, 和,创建目录。 您可以使用和命令查看这些功能的手册。

  • 在这个例子中,我们将引入from()函数。使用这个特殊的“创建”函数,我们可以从一个列表中创建一个Observable。Observable将发射出列表中的每一个元素,我们可以通过订阅它们来对这些发出的元素做出响应。 为了实现和第一个例子同样的结果,我们在每一个onNext()函数更新我们的适配器,添加元素并通知插入。 我们将复用和第一个例子同样的结构。主要的不同的是我们不再检索已安装的应用列表。

  • 我想根据的内容将单个拆分为的。生成的应该包含原始流数据的一部分。 我的实际应用程序更复杂(它是对时间间隔列表中的日志行进行分组),但我的问题是如何处理流,因此这里我询问一个简化的示例。 我希望能够拆分

  • 本文向大家介绍C#程序创建一个简单线程,包括了C#程序创建一个简单线程的使用技巧和注意事项,需要的朋友参考一下 为了创建线程,我创建了一个函数- 调用上述函数以创建线程,并创建一个新的ThreadStart委托- 示例 使用以下代码创建一个简单的线程。 输出结果

  • 问题内容: 搜索后,我没有在网上或任何其他资源中找到任何东西,我想知道您是否可以通过联接另一个视图和一些其他表来形成一个视图?我猜类似的东西与Server_ref.part_notification_view是要加入的视图。 问题答案: 您当然可以在另一个视图的基础上建立一个视图: 但是您不能引用基础表中的任何内容,包括不属于视图的任何字段: 具有相同列的基础表不是问题,并且如果您在视图中包含的内