【问题标题】:How to convert cv::MAT byte array sent from C++ to a Bitmap in Java?如何将从 C++ 发送的 cv::MAT 字节数组转换为 Java 中的位图?
【发布时间】:2016-08-26 13:36:12
【问题描述】:

我正在通过 JNI 从 C++ 接收字节数组以及单个通道 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,因为它只适用于压缩位图,但不知道如何更正。

【问题讨论】:

    标签: java android c++ opencv bitmap


    【解决方案1】:

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

    【讨论】:

    • 我应该为 stride 和 config 设置什么值?
    猜你喜欢
    • 2013-02-18
    • 1970-01-01
    • 2019-12-03
    • 2022-06-25
    • 1970-01-01
    • 2011-06-26
    • 2018-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多