int BitmapToMat(JNIEnv * env, jobject obj_bitmap, cv::Mat & matrix) {
void * bitmap_pixels; // Save picture pixel data
AndroidBitmapInfo bitmap_info; // Save picture parameters
int ret;
if ((ret = AndroidBitmap_getInfo(env, obj_bitmap, &bitmap_info)) < 0)
{
return ECV_BITMAPINFO_ERROR;
}
if ( bitmap_info.format != ANDROID_BITMAP_FORMAT_RGBA_8888 )
{
return ECV_BITMAPINFO_NOT_RGBA_ERROR;
}
if ((ret = AndroidBitmap_lockPixels(env, obj_bitmap, &bitmap_pixels)) < 0)
{
return ECV_BITMAP_LOCK_ERROR;
}
if (bitmap_pixels == 0){
return ECV_BITMAP_PIXEL_ERROR;
}
cv::Mat tmp(bitmap_info.height, bitmap_info.width, CV_8UC4, bitmap_pixels); // Establish temporary mat
cv::cvtColor(tmp,matrix,cv::COLOR_BGRA2BGR);
//tmp.copyTo(matrix); // Copy to target matrix
AndroidBitmap_unlockPixels(env, obj_bitmap); // Unlock
return ECV_OK;
}