我正在尝试将以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?我做错了什么?有什么帮助吗?
谢谢。
答案 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