【发布时间】:2015-07-01 16:10:55
【问题描述】:
我想将图像(通过 jni)从 C++ 传递到 android 应用程序。我从unsigned char* 数组开始。这个数组没有任何损坏;我什至可以将其保存到ppm 文件中并在我的笔记本电脑上正确显示。
然后,我使用此函数将其转换为jByteArray:
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?
【问题讨论】:
-
可能你得到的是空数据。一旦检查出来。
标签: java android c++ bitmap java-native-interface