Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将java位图像素传递给jni的最快方法_Java_Android_Bitmap_Android Ndk_Java Native Interface - Fatal编程技术网

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

将java位图像素传递给jni的最快方法,java,android,bitmap,android-ndk,java-native-interface,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, &bitmapI

我正试图找到将位图从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);
然后在析构函数中执行以下操作:

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

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

void* bitmapPixels;
AndroidBitmap_lockPixels(env, bitmap, &bitmapPixels)
AndroidBitmap_unlockPixels( env, bitmap);
然后在析构函数中执行以下操作:

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

更快的方法是不复制像素。据我所知,您锁定的是像素缓冲区地址,而不是位图,这意味着位图可以继续使用,并且保证不会在内存中移动。更快的方法是不复制像素。据我所知,您锁定的是像素缓冲区地址,而不是位图,这意味着位图可以继续使用,并且保证不会在内存中移动。