java - 将java位图像素传递给jni的最快方法

标签 java android bitmap android-ndk java-native-interface

我正在尝试找到将位图从 java 传递到 JNI 的最佳/最快方法。接下来就是我目前是如何进行这个操作的。这个可以改进吗,或者还有其他更快的方法吗?

void JNIBitmap::setBuffer(JNIEnv* env, const jobject bitmap)
{
    // Allocate native pixels buffer

    AndroidBitmapInfo bitmapInfo;
    AndroidBitmap_getInfo(env, bitmap, &bitmapInfo)

    this->bufferWidth  = bitmapInfo.width;
    this->bufferHeight = bitmapInfo.height;
    this->bufferSize   = this->bufferWidth * this->bufferHeight * 4;
    this->buffer       = new uint8_t[this->bufferSize];

    // Copy pixels to native buffer

    void* bitmapPixels;
    AndroidBitmap_lockPixels(env, bitmap, &bitmapPixels)

    memcpy((void*)this->buffer, bitmapPixels, this->bufferSize);

    AndroidBitmap_unlockPixels(env, bitmap);
}

最佳答案

最简单的方法是调用 AndroidBitmap_lockPixels。 因此,在 JNIBitmap 的构造函数中,您将执行以下操作:

void* bitmapPixels;
AndroidBitmap_lockPixels(env, bitmap, &bitmapPixels)

然后在析构函数中你可以这样做:

AndroidBitmap_unlockPixels( env, bitmap);

关于java - 将java位图像素传递给jni的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32603218/

相关文章:

java - Spring Boot 服务器在使用 Retrofit2 进行 POST 时出错,仅当数据库中存在关系时才会发生

java - 导致故障转储的 Java 错误的解决方法

java - android.support.v7.widget.GridLayout 实例化失败

java - 如何在 ListView 中添加最近播放的歌曲?

windows - 什么是 rgbReserved?

java - 如何在同一个类下设计多个对象,如 JSON 映射所示?

java - 需要返回数组列表的平均值

java - cordova 8 发送无声短信

Android有效地将图像加载到imageview中

c# - 将标准 C# 转换为符合 MonoTouch 的代码