BitmapFactory.decodeByteArray为空,求大神解惑
 String stra = d.getResult().getImage();

            try {
                byte[] data=null;
                data = stra.getBytes("UTF-8");
                // 为UTF8编码
                // 把二进制图片转成位图
                Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0,
                        data.length,null);
                image.setImageBitmap(bitmap); 
            } catch (UnsupportedEncodingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

data中有数据,bitmap为空,求解

6个回答

你的字节数据要先转成YUV格式的设置好image类型才可以调用decodeByteArray();改成这样
YuvImage yuvimage=new YuvImage(data, ImageFormat.NV21, 20,20, null); //20、20分别是图的宽度与高度
ByteArrayOutputStream baos = new ByteArrayOutputStream();
yuvimage.compressToJpeg(new Rect(0, 0,20, 20), 80, baos);//80--JPG图片的质量[0-100],100最高
byte[] jdata = baos.toByteArray();
bitmap = BitmapFactory.decodeByteArray(jdata, 0, jdata.length);

EricFantastic
EricFantastic 这个就不晓得了
接近 4 年之前 回复
xdx1399513637
ni看我屌不 图片出来了,但是模糊一片
接近 4 年之前 回复
EricFantastic
EricFantastic 回复xdx1399513637: yuvimage对象就只有转成Jpeg的compressToJpeg()这个方法
接近 4 年之前 回复
xdx1399513637
ni看我屌不 可以把图片转成png格式输出吗
接近 4 年之前 回复

你确定data中有数据?我看代码bitmap也只能从data数据转换来,所以这样我就觉得好奇怪,怎么可能data有数据,bitmap为空???

xdx1399513637
ni看我屌不 恩 ,data中有数据
接近 4 年之前 回复

图片说明显示出来的图片

xdx1399513637
ni看我屌不 回复EricFantastic: 编码了啊是UTF-8
接近 4 年之前 回复
EricFantastic
EricFantastic 你的data数据获取时编码了没有,确定是正确的视频帧数据?
接近 4 年之前 回复
    byte[] data = null;
                data = stra.getBytes("UTF-8");
                // 为UTF8编码
                // 把二进制图片转成位图
                YuvImage yuvimage = new YuvImage(data, ImageFormat.NV21, 200,
                        200, null); // 20、20分别是图的宽度与高度

                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                // 80--JPG图片的质量[0-100],100最高
                yuvimage.compressToJpeg(new Rect(0, 0, 20, 20), 80, baos);
                byte[] jdata = baos.toByteArray();
                Bitmap bitmap = BitmapFactory.decodeByteArray(jdata, 0,
                        jdata.length);
                image.setImageBitmap(bitmap);
xdx1399513637
ni看我屌不 好吧,谢谢了
接近 4 年之前 回复
EricFantastic
EricFantastic 好吧,我也找不到原因,只能帮你到这了
接近 4 年之前 回复
xdx1399513637
ni看我屌不 服务器那边吧byte转成了String必须要UTF-8
接近 4 年之前 回复
EricFantastic
EricFantastic 你去掉UTF-8,那个是字符串编码格式
接近 4 年之前 回复
xdx1399513637
ni看我屌不 从服务器获取的在JSON里取出来的
接近 4 年之前 回复
EricFantastic
EricFantastic 你的stra数据是怎么获取的
接近 4 年之前 回复

楼主,你的问题解决了没,我照着这样做也是跟你一样的模糊图像,请指教

我解决了反正,我是把图片存到数据库里了,读出的时候,BitmapFactory.decodeByteArray为空,然后我发现getBytes 方法有问题,我就用的下面这个方法把字符串转为了bytes,然后就可以了
public static byte[] hex2byte(String str) {
if (str == null)
return null;
str = str.trim();
int len = str.length();
if (len == 0 || len % 2 == 1)
return null;
byte[] b = new byte[len / 2];
try {
for (int i = 0; i < str.length(); i += 2) {
b[i / 2] = (byte) Integer.decode("0X" + str.substring(i, i + 2)).intValue();
}
return b;
} catch (Exception e) {
return null;
}
}

    调用的代码如下
     byte[] data = hex2byte(photo);
 Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length, null);
 imageView.setImageBitmap(bitmap);

    其中photo是从数据库读出的字符串,去掉了0x
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!