我希望您可以将一个图像(通过JNI)从C++传递到Android应用程序。我有一个未被破坏的unsigned char*数组,甚至可以将其保存到ppm文件中,并在我的笔记本电脑上正确显示它。然后,我使用以下函数将其转换为jByteArray:
最后一步是在ImageView上展示它。为此,我执行以下代码(从SO上的另一个问题中获取):
jbyteArray imgByte=as_byte_array(env,imgRaw,img.getRawImageSize());
...
jbyteArray as_byte_array(JNIEnv *env, unsigned char* buf, int len) {
jbyteArray array = env->NewByteArray (len);
env->SetByteArrayRegion (array, 0, len, reinterpret_cast<jbyte*>(buf));
return array;
}
接下来,我将这个jByteArray
发送到Java端。这个变量已经被正确填充,我可以通过在LogCat上打印它的十六进制值来验证:
07-01 18:02:45.941 7017-8238/com.myapp.myapp W/C++ side﹕ 798a95798b9677889371838d6b7d8664757e5d6e7860717b5e...
07-01 18:02:46.941 7017-8238/com.myapp.myapp W/Java side﹕ 798a95798b9677889371838d6b7d8664757e5d6e7860717b5e...
最后一步是在ImageView上展示它。为此,我执行以下代码(从SO上的另一个问题中获取):
public void setImageViewWithByteArray(final ImageView view, byte[] data) {
final Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
if (bitmap==null) {
Log.e(TAG,"Bitmap is NULL!");
view.setImageResource(R.drawable.abc_btn_radio_material);
}
else {
view.setImageBitmap(bitmap);
}
}
});
}
但是 bitmap
变量总是为 null
。我做错了什么?有没有办法调试 decodeByteArray
?