BitmapFactory.decodeByteArray为空,求大神解惑

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为空,求解

你的字节数据要先转成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);

图片说明显示出来的图片

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

    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);

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

我解决了反正,我是把图片存到数据库里了,读出的时候,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