JNI 层 Bitmap 转 OpenCV Mat
Java 提供的图片类型大多是 Bitmap 类型(ARGB_8888 或 RGB_565)
那么如果需要使用 OpenCV 进行处理,需要对 Bitmap 转 cv::Mat。
假设输入的图片为:jobject obj_bitmap
输出的图片为:jobject obj_bitmapOut
#include <android/bitmap.h>
#include <opencv/cv.hpp>
#include <opencv2/opencv.hpp>
#include <opencv2/core.hpp>
#define ASSERT(status, ret) if (!(status)) { return ret; }
#define ASSERT_FALSE(status) ASSERT(status, false)
bool BitmapToMatrix(JNIEnv * env, jobject obj_bitmap, cv::Mat & matrix) {
void * bitmapPixels; // 保存图片像素数据
AndroidBitmapInfo bitmapInfo; // 保存图片参数
ASSERT_FALSE( AndroidBitmap_getInfo(env, obj_bitmap, &bitmapInfo) >= 0); // 获取图片参数
ASSERT_FALSE( bitmapInfo.format