为什么我的BitmapFactory.decodeByteArray返回null?

时间:2015-07-21 12:04:27

标签: android android-bitmap

我正在尝试将以Base64格式存储在数据库中的图像转换为要在Imageview中使用的位图。

所以,我用这种方式将它存储在SQLite中:

Bitmap imageBitmap = (Bitmap) extras.get("data");
ByteArrayOutputStream stream = new ByteArrayOutputStream();
Bitmap fotoGrande=(Bitmap) extras.get("data");
imageBitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
//I am adding some data to EXIF here, add to an static ArrayList<Bitmap> in other class and I store it this way:

int bytes=listaFotos.get(i).getFoto().getByteCount();
ByteBuffer buffer = ByteBuffer.allocate(bytes);
listaFotos.get(i).getFoto().copyPixelsToBuffer(buffer);
values.put("foto", Base64.encodeToString(buffer.array(), Base64.DEFAULT));

稍后,我需要获取该图像以使其适合ImageView:

String foto = csr2.getString(0);//csr2 is a cursor
byte[] arrayFoto = Base64.decode(foto, Base64.DEFAULT);//This is not null
Bitmap fotoBitmap = BitmapFactory.decodeByteArray(arrayFoto, 0, arrayFoto.length);//This is null

我知道有很多关于此的问题。我搜索过,但没有回答解决我的问题。

为什么我的BitmapFactory.decodeByteArray返回null?我做错了什么?有什么帮助吗?

谢谢。

2 个答案:

答案 0 :(得分:1)

原来是一个数据库问题。 SQLite为您提供1MB MAX大小的光标。我从数据库中获取字节,使用1MB光标,图片未正确发送。

为了解决这个问题,我将数据库的路径存储在数据库而不是字节中。

答案 1 :(得分:0)

首先,图像会像{/ 1}}一样转换为Bitmap

String

其中 ByteArrayOutputStream stream = new ByteArrayOutputStream(); camera.compress(Bitmap.CompressFormat.JPEG, 100, stream); byte imageInByte[] = stream.toByteArray(); String encodedImage = Base64.encodeToString(imageInByte, Base64.DEFAULT); 是位图。 并将字符串camera存储在数据库

像这样的getImage字符串

encodedImage