为什么我的 BitmapFactory.decodeByteArray 返回 null?
Why is my BitmapFactory.decodeByteArray returning null?
我正在尝试将以 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 返回空值?我做错了什么?有帮助吗?
谢谢。
首先图像在 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
是位图。
并将字符串 encodedImage
存储在数据库
中
然后像这样获取图像字符串
byte[] b = Base64.decode(encodedImage , Base64.DEFAULT);
Bitmap bitmap = BitmapFactory.decodeByteArray(b, 0, b.length);
原来是数据库问题。 SQLite 给你一个 1MB MAX 大小的游标。我正在从数据库中获取字节,光标为 1MB,图片发送不正确。
为了修复它,我将照片的路径而不是字节存储在数据库中。
我正在尝试将以 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 返回空值?我做错了什么?有帮助吗?
谢谢。
首先图像在 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
是位图。
并将字符串 encodedImage
存储在数据库
然后像这样获取图像字符串
byte[] b = Base64.decode(encodedImage , Base64.DEFAULT);
Bitmap bitmap = BitmapFactory.decodeByteArray(b, 0, b.length);
原来是数据库问题。 SQLite 给你一个 1MB MAX 大小的游标。我正在从数据库中获取字节,光标为 1MB,图片发送不正确。
为了修复它,我将照片的路径而不是字节存储在数据库中。