小编MSa*_*sli的帖子

将drawable作为字节数组发送到android的jni部分

我正在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)

c++ java android opencv bitmap

1
推荐指数
1
解决办法
2616
查看次数

标签 统计

android ×1

bitmap ×1

c++ ×1

java ×1

opencv ×1