1.创建数据库表的时候选择存图片的字段类型为blob
StringBuffer createTableOfHistory =
new
StringBuffer();
createTableOfHistory.append(
"CREATE TABLE "
+某表名);
createTableOfHistory.append(
" ( _id INTEGER PRIMARY KEY AUTOINCREMENT ,"
);
createTableOfHistory.append(该存图片的字段名+
" BLOB ,"
);
createTableOfHistory.append(其他字段名
1
+
" TEXT ,"
);
.......
createTableOfHistory.append(其他字段名n+
" TEXT );"
);
//记得这里带个“;”封号
db.execSQL(createTableOfHistory.toString());
//执行该创表语句
|
2.存储数据
2.1将数据流转成数组的方法
InputStream inputStream = getResources().openRawResource(R.drawable.icon);
private
static
byte
[] streamToBytes(InputStream is) {
ByteArrayOutputStream os =
new
ByteArrayOutputStream(
1024
);
byte
[] buffer =
new
byte
[
1024
];
int
len;
try
{
while
((len = is.read(buffer)) >=
0
) {
os.write(buffer,
0
, len);
}
}
catch
(java.io.IOException e) {
}
return
os.toByteArray();
}
|
2.2.将Bitmap对象转换成数组的方法【包含从资源文件中获得图片对象Bitmap】
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.icon);
private
static
byte
[] bitmapToBytes(Bitmap bitmap){
if
(bitmap ==
null
) {
return
null
;
}
final
ByteArrayOutputStream os =
new
ByteArrayOutputStream();
// 将Bitmap压缩成PNG编码,质量为100%存储
bitmap.compress(Bitmap.CompressFormat.PNG,
100
, os);
//除了PNG还有很多常见格式,如jpeg等。
return
os.toByteArray();
}
ContentValues values =
new
ContentValues();
values.put(该存图片的字段名, readHistoryInfo.getBookIcon());
values.put(其他字段名
1
, “
2011
-
05
-
17
”);
......
return
mSqliteDatabase.insert(表名,
null
, values);
//插入数据
|
3.提取数据库中的数组数据并转换成Bitmap或DrawableBitmap对象【包含byte[] —> Bitmap】
某类对象m(该类是负责创表,删表,插入数据,删除数据的类).openOrCreateDB();//openOrCreateDB()也是该类的一个打开或创建数据库的方法。
Cursor cursor = 某类对象m.getData(该存图片的字段名,
null
);
if
(cursor.moveToFirst()) {
// byte[] —> Bitmap
byte
[] bytes = cursor.getBlob(cursor.getColumnIndex(该存图片的字段名));
Bitmap bitmap = BitmapFactory.decodeByteArray(bytes,
0
, bytes.length,
null
);
BitmapDrawable bitmapDrawable =
new
BitmapDrawable(bitmap);
}
|
4.Drawable —> Bitmap
Bitmap bm = xxx;
//xxx根据你的情况获取
BitmapDrawable bd=
new
BitmapDrawable(bm);
提示:因为BtimapDrawable是Drawable的子类,最终直接使用bd对象即可。
|
public
static
Bitmap drawableToBitmap(Drawable drawable) {
Bitmap bitmap = Bitmap.createBitmap(
drawable.getIntrinsicWidth(),
drawable.getIntrinsicHeight(),
drawable.getOpacity() != PixelFormat.OPAQUE ?
Bitmap.Config.ARGB_8888: Bitmap.Config.RGB_565);
return
bitmap;
}
|
Drawable d=xxx;
//xxx根据自己的情况获取drawable
BitmapDrawable bd = (BitmapDrawable) d;
Bitmap bm = bd.getBitmap();
|