我将图像作为字节数组存储在一个项目的sqlite数据库中。 然后我在另一个项目中使用预先填充的表
但问题是Bitmap Factory的结果为null。
存储图像的代码:
Bitmap myLogo = BitmapFactory.decodeResource(getResources(), arr[i]);
ByteArrayOutputStream stream1 = new ByteArrayOutputStream();
myLogo.compress(Bitmap.CompressFormat.JPEG, 100, stream1);
b = stream1.toByteArray();
检索图像的代码:
BitmapFactory.Options options = new BitmapFactory.Options();
decodedByte = BitmapFactory.decodeByteArray(Image, 0,Image.length, options);
System.out.println("Image = " + Image);
System.out.println("decodedByte = " + decodedByte);
这里Image返回长度为12的byteArray(Image)。但是位图(decodingByte)返回null值。
我尝试了很多方法但找不到解决方案。请帮忙!
答案 0 :(得分:0)
这是我从bitmap到string
的函数 public String BitMapToString(Bitmap bitmap) {
try {
Bitmap encogida = Bitmap.createScaledBitmap(bitmap, 226, 180, true);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
encogida.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] b = baos.toByteArray();
return org.kobjects.base64.Base64.encode(b);
} catch (Exception ex) {
Conexiones.escribirLog(Log.getStackTraceString(ex),
getString(R.string.versionReal));
Log.e("ERROR BitMapToString ", ""); // ex.getMessage());
return "";
}
}
我希望它有所帮助
答案 1 :(得分:0)
您是否在没有options参数的情况下尝试了decodeByteArray?我认为在这种情况下它没用。
无论如何,最好将图像URI存储为String而不是sqlite数据库中的字节数组。
获取URI:
String path = Images.Media.insertImage(getContentResolver(), mylogo,
"title", null);
Uri uriMyLogo = Uri.parse(path);
String uriString = uriMyLogo.toString() ;
从URI获取图像
Uri uriLogo = Uri.parse(uriString);
Bitmap logo = null;
try {
logo = Media.getBitmap(this.getContentResolver(), uriLogo);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
如果您无法按照自己的意愿管理它,我希望它会有所帮助。