如何将从 C++ 发送的 cv::MAT 字节数组转换为 Java 中的位图?
Posted
技术标签:
【中文标题】如何将从 C++ 发送的 cv::MAT 字节数组转换为 Java 中的位图?【英文标题】:How to convert cv::MAT byte array sent from C++ to a Bitmap in 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
,因为它只适用于压缩位图,但不知道如何更正。
【问题讨论】:
【参考方案1】:使用Bitmap.createBitmap(int[] colors, int offset, int stride, int width, int height, Bitmap.Config config)
显然第一个参数是未压缩的数组。
【讨论】:
我应该为 stride 和 config 设置什么值?以上是关于如何将从 C++ 发送的 cv::MAT 字节数组转换为 Java 中的位图?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 cv::mat 对象从 python 模块传递给 c++ 函数并返回返回的 cv::mat 类型的对象?
如何从 c++ 接口 cv::Mat 转换为 c IplImage?