Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.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
Android NDK如何从图像阵列创建图像_Android_Android Ndk_Java Native Interface - Fatal编程技术网

Android NDK如何从图像阵列创建图像

Android NDK如何从图像阵列创建图像,android,android-ndk,java-native-interface,Android,Android Ndk,Java Native Interface,我在JNI中有一个JintArray。我想从中创建一个图像文件 现在我正在创建一个映像,方法是将该数组传递给java端,然后将该数组传递给映像。但它在持续使用时看起来很慢 为了创建更多的图像,我想在JNI本身中完成这个过程 jintArray ret = (*env)->NewIntArray(env, pixels); (*env)->SetIntArrayRegion(env, ret, 0, pixels, (jint *)pixbuf); free(pixb

我在
JNI
中有一个
JintArray
。我想从中创建一个图像文件

现在我正在创建一个映像,方法是将该数组传递给java端,然后将该数组传递给映像。但它在持续使用时看起来很慢

为了创建更多的图像,我想在
JNI
本身中完成这个过程

 jintArray ret = (*env)->NewIntArray(env, pixels);
    (*env)->SetIntArrayRegion(env, ret, 0, pixels, (jint *)pixbuf);
    free(pixbuf);
    LogD("NBridge: Returning data.");
    return ret;
这就是我最后要做的。ret是我正在使用的图像数组

编辑 将int[]转换为image的Java代码

像素是我从jni获得的int[]值。

 Bitmap bmp_ss = Bitmap.createBitmap(bitmap_width,
                bitmap_height,
                Bitmap.Config.ARGB_8888);
        bmp_ss.setPixels(pixels, 0, screen_width,
                0, 0, screen_width, screen_height);
 Matrix rotator = new Matrix();
            switch (rotation) {
            case (Surface.ROTATION_0):
                break;
            case (Surface.ROTATION_90):
                rotator.postRotate(0);
                break;
            case (Surface.ROTATION_180):
                rotator.postRotate(180);
                break;
            case (Surface.ROTATION_270):
                rotator.postRotate(0);
                break;


    bmp_ss = Bitmap.createBitmap(bmp_ss, 0, 0, screen_width, screen_height, rotator, false);
try {
                fos = new FileOutputStream(file);
            } catch (FileNotFoundException e) {
                throw new InvalidParameterException();
            }
            bmp_ss.compress(CompressFormat.JPEG, 25, fos);

向我们展示您当前的源代码!嗨,谢尔盖。我已经在编辑中添加了代码。您每次都在分配一个新的int[]。你能分配一个缓冲区并重新使用它吗?嗨,fadden,怎么做???而且每次我都会得到int[],因为每次我都会得到新的图像数据。你能告诉我如何在那里使用缓冲区吗?@Rajesh:你的Java代码会旋转ARGB位图并将其压缩到JPEG缓冲区中。我相信后一种手术需要大部分时间。如果你想加快进程,考虑是否可以从YUV缓冲区开始,而不是RGB。