我正在Android上使用OpenCv进行图像处理.在作为教程3的OpenCv示例中,它们使用本机代码,并且它们将帧数据从java部分发送到jni部分作为字节数组.然后他们将字节数组转换为mat.最后,他们正在处理mat变量并将其返回给show.
像这样,我想把drawable发送到jni部分.首先,我将drawable转换为位图,并将位图转换为字节数组,如下所示;
private Bitmap my_bitmap;
private byte[] process_data;
-o-
Drawable myDrawable = getResources().getDrawable(R.drawable.test);
my_bitmap = ((BitmapDrawable) myDrawable).getBitmap();
ByteArrayOutputStream stream = new ByteArrayOutputStream();
mybitmap.compress(CompressFormat.PNG, 100, stream);
process_data = stream.toByteArray();
Run Code Online (Sandbox Code Playgroud)
然后我将这个字节数组发送到jni部分然后我从jni给出int数组并创建位图;
int[] rgba = mRGBA;
Test(p_width, p_height, process_data, rgba); //This is jni function
Bitmap bmp = Bitmap.createBitmap(p_width, p_height, Bitmap.Config.ARGB_8888);
bmp.setPixels(rgba, 0, p_width, 0, 0, p_width, p_height);
Run Code Online (Sandbox Code Playgroud)
但是返回的位图就像噪声一样.
这是我的c ++代码;
JNIEXPORT void JNICALL Java_org_opencv_samples_tutorial3_Sample3View_Test(JNIEnv* env, jobject thiz,
jint width, jint height, jbyteArray p_data, jintArray bgra)
{
jbyte* _p_data= env->GetByteArrayElements(p_data, 0);
jint* _bgra = …Run Code Online (Sandbox Code Playgroud)