如何将从C ++发送的cv :: MAT字节数组转换为Java中的Bitmap?

时间:2016-08-26 13:36:13

标签: java android c++ opencv bitmap

我收到一个字节数组,以及从C ++到JNI的单个通道cv::Mat图像的宽度和高度。在Java中,我需要创建一个Bitmap以进行进一步处理。我尝试了标准选项,但我无法解码Bitmap(我不断获得null)。 JNI中的代码是

jbyteArray myJByteArray = env->NewByteArray(imageToScan.cols * imageToScan.rows);
env->SetByteArrayRegion(myJByteArray, 0, imageToScan.cols * imageToScan.rows, (jbyte *) imageToScan.data);

我正在检查数组长度以及我在Java中收到的宽度和高度,它们都没问题。现在,我尝试了以下内容:

    BitmapFactory.Options options = new BitmapFactory.Options();
    options.outHeight = height;
    options.outWidth = width;
    Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length, options);

但它不起作用。我知道我不能使用BitmapFactory.decodeByteArray,因为它仅适用于压缩位图,但不知道如何纠正这一点。

1 个答案:

答案 0 :(得分:0)

使用Bitmap.createBitmap(int[] colors, int offset, int stride, int width, int height, Bitmap.Config config)显然第一个参数是未压缩的数组。