【发布时间】:2019-06-30 09:47:05
【问题描述】:
我在可绘制文件夹中有一个图像,我想转换为位图,然后转换为 byte[] 以存储到数据库中,我可以将位图转换为字节数组,但我无法获得由于Bitmap photo = BitmapFactory.decodeResource(getResources(), R.drawable.image); 来自drawable 的图像返回null。怎么做?
我现在有什么
Bitmap photo = BitmapFactory.decodeResource(getResources(), R.drawable.image); //this returns null
if(photo != null)
byte[] bytes = getBitmapAsByteArray(photo);
//this works
DatabaseHelper databaseHelper = new DatabaseHelper(this);
databaseHelper.add("DEFAULT",bytes);
更新:
当我使用photo.setImageBitmap(bitmap); 将位图设置为图像时,它从数据库中检索信息后它没有出现,似乎商店不起作用
我正在像这样将信息存储到数据库中
private static byte[] getBitmapAsByteArray(Bitmap bitmap) {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 0, outputStream);
return outputStream.toByteArray();
}
public boolean addUserInformation(String username, byte[] picture){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("USERNAME", username);
if(picture!=null) {
values.put("PICTURE", picture);
}
id = db.insert(TABLE_NAME1, null, values);
}
db.close();
if(id == -1)
return false;
else
return true;
}
并检索这样的信息
Cursor data = databaseHelper.getUserInformation();
if(data.moveToFirst()) {
mUsername = data.getString(1);
bytes = data.getBlob(2);
if(bytes!=null)
profilePhoto = BitmapFactory.decodeByteArray(bytes, 0, data.getBlob(2).length);
}
在数据库类中使用 getUserInformation()
public Cursor getUserInformation(){
SQLiteDatabase db = this.getReadableDatabase();
String query = "SELECT * FROM " + TABLE_NAME1;
Cursor c = db.rawQuery(query,null);
return c;
}
【问题讨论】:
-
为什么要将
VectorDrawable“转换”为原始像素?VectorDrawable的主要目的是避免光栅化图形,而是使用矢量图形 -
我需要将图像作为字节数组存储到 SQLite 数据库中
-
那你为什么要使用
VectorDrawable呢? -
我应该使用什么来从可绘制文件夹中获取 .xml 图像并将其转换为字节数组? @pskink
标签: java android image bitmap drawable