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