gpt4 book ai didi

android - 从 NDK 中的像素数组创建 Android 的可变位图

转载 作者:行者123 更新时间:2023-11-30 03:17:04 26 4
gpt4 key购买 nike

我需要在 native 代码中进行一些Bitmap 操作。具体来说,我的 JNI 设置是这样的:

// pixels color array in ARGB_8888 format, returned by dependent library
char* pixels;
jobject bitmap = null /* what to put here */;
return bitmap;

我想填写指定的行以返回可在我的Activity中使用的Bitmap,以便稍后修改pixels 在NDK中,这里返回的Bitmap对象是自动更新的,不需要重新创建或者数据拷贝。目的是 pixels 一遍又一遍地更新。我知道 Bitmap.createBitmap 方法,如 http://developer.android.com/reference/android/graphics/Bitmap.html但是适用的方法似乎生成不可变位图,而生成可变位图的方法不允许我输入像素数据。

最佳答案

我深入研究了 Android 源代码(从 Bitmap.java 及其对应的 JNI 开始)并设法找到了 C++ 类 GraphicsJNI .适用的方法是

static SkBitmap* getNativeBitmap(JNIEnv*, jobject bitmap);

显然,每个Bitmap 都存储了对本地C++ 类的引用SkBitmap并简单地将其方法转发给相应的本地方法。 SkBitmap 属于外部库 Skia .从它的界面,我可以使用 setPixels 方法来达到我的目的。所以解决方案是:

#include <GraphicsJNI.h>
#include <SkBitmap.h>

char* pixels; // assume already exists
jobject bitmap; // construct an immutable bitmap in Java
SkBitmap* native_bitmap = GraphicsJNI::getNativeBitmap(env, bitmap);
native_bitmap->setPixels(pixels);

注意:此代码需要链接libandroid_runtime.solibskia.so,两者都可以从模拟器中获取.这使得代码依赖于平台。

关于android - 从 NDK 中的像素数组创建 Android 的可变位图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19876409/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com