You need to convert the YUV image to the RGBA image.
cv::Mat _yuv(height+height/2, width, CV_8UC1, (uchar *)imagebuffer); cv::cvtColor(_yuv, _yuv, CV_YUV2RGBA_NV21);
Typically, YUV images are 1 channel images with 1.5*height (if it was an RGB or grayscale image).
Or you can create a new Mat and pass jint array for the built-in function and use this array to set the pixels of the bitmap.
jint *_out = env->GetIntArrayElements(out, 0); cv::Mat _yuv(height + height/2, width, CV_8UC1, (uchar*)imagebuffer); cv::Mat _rgba(height, width, CV_8UC4, (uchar *)_out); cv::cvtColor(_yuv, _rgba, CV_YUV2RGBA_NV21); env->ReleaseIntArrayElements(out, _out, 0);
In Java,
bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); pixels = new int[width * height]; native_function(height, width, bytedata, pixels); bitmap.setPixels(pixels, 0, width, 0, 0, width, height);