logo资料库

android将图片转换存到数据库再从数据库读取转换成图片实现代码.pdf

第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
资料共3页,全文预览结束
android将图片转换存到数据库再从数据库读取转换成图片实 将图片转换存到数据库再从数据库读取转换成图片实 现代码现代码 有时候我们想把图片存入到数据库中,尽管这不是一种明智的选择,但有时候还是不得以会用到,下面说说将 图片转换成byte[]数组存入到数据库中去,并从数据库中取出来转换成图像显示出来 首先,我们要把图片存入到数据库中,首先要创建一个数据库, 如下所示: 首先,我们要把图片存入到数据库中,首先要创建一个数据库 复制代码 代码如下: package com.android.test; import java.io.ByteArrayOutputStream; import android.content.ContentResolver; import android.content.ContentValues; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.graphics.Bitmap; import android.graphics.Bitmap.CompressFormat; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.provider.BaseColumns; public class PictureDatabase extends SQLiteOpenHelper { //数据库的字段 public static class PictureColumns implements BaseColumns { public static final String PICTURE = "picture"; } private Context mContext; //数据库名 private static final String DATABASE_NAME = "picture.db"; //数据库版本号 private static final int DATABASE_Version = 1; //表名 private static final String TABLE_NAME = "picture"; //创建数据库 public PictureDatabase (Context context) { super(context, DATABASE_NAME, null, DATABASE_Version); this.mContext = context; } //创建表并初始化表 @Override public void onCreate (SQLiteDatabase db) { String sql = "Create table " + TABLE_NAME + "(" + BaseColumns._ID + " integer primary key autoincrement," + PictureColumns.PICTURE + " blob not null);"; db.execSQL(sql); //初始化 initDataBase(db,mContext); } //将转换后的图片存入到数据库中 private void initDataBase (SQLiteDatabase db, Context context) { Drawable drawable = context.getResources().getDrawable(R.drawable.test_icon_resizer); ContentValues cv = new ContentValues(); cv.put(PictureColumns.PICTURE, getPicture(drawable)); db.insert(TABLE_NAME, null, cv); }
//将drawable转换成可以用来存储的byte[]类型 private byte[] getPicture(Drawable drawable) { if(drawable == null) { return null; } BitmapDrawable bd = (BitmapDrawable) drawable; Bitmap bitmap = bd.getBitmap(); ByteArrayOutputStream os = new ByteArrayOutputStream(); bitmap.compress(CompressFormat.PNG, 100, os); return os.toByteArray(); } //更新数据库 @Override public void onUpgrade (SQLiteDatabase db, int oldVersion, int newVersion) { String sql = " DROP TABLE IF EXISTS " + TABLE_NAME; db.execSQL(sql); onCreate(db); } } 代码注释的比较详细. 这里重点要说的是初始化数据库的时候,将Drawable转变成byte[]的时候,先讲Drawable转换成Bitmap,然后将Bitmap存入 字节数据输出流,从输出流里获取byte[]数组。 复制代码 代码如下: ByteArrayOutputStream os = new ByteArrayOutputStream(); bitmap.compress(CompressFormat.PNG, 100, os); return os.toByteArray(); 之后将字符数组存入到类型为blob的数据库中去。 复制代码 代码如下: ContentValues cv = new ContentValues(); cv.put(PictureColumns.PICTURE, getPicture(drawable)); db.insert(TABLE_NAME, null, cv); 之后在代码中从数据库中取出byte[],然后转换成Drawable,设置图片即可。 代码如下: 复制代码 代码如下: package com.android.test; import java.util.ArrayList; import android.app.Activity; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.widget.ImageView; public class TestPicture extends Activity { @Override protected void onCreate (Bundle savedInstanceState) { super.onCreate(savedInstanceState); ImageView iv = new ImageView(this); if(getDrawable().size() != 0) { iv.setImageDrawable(getDrawable().get(0)); }
setContentView(iv); } private ArrayList getDrawable() { PictureDatabase pd = new PictureDatabase(this); SQLiteDatabase sd = pd.getWritableDatabase(); ArrayList drawables = new ArrayList(); //查询数据库 Cursor c = sd.query("picture", null, null, null, null, null, null); //遍历数据 if(c != null && c.getCount() != 0) { while(c.moveToNext()) { //获取数据 byte[] b = c.getBlob(c.getColumnIndexOrThrow(PictureDatabase.PictureColumns.PICTURE)); //将获取的数据转换成drawable Bitmap bitmap = BitmapFactory.decodeByteArray(b, 0, b.length, null); BitmapDrawable bitmapDrawable = new BitmapDrawable(bitmap); Drawable drawable = bitmapDrawable; drawables.add(drawable); } } return drawables; } } 重点注意如何将数据库中取出的byte[]转换成drawable: 复制代码 代码如下: Bitmap bitmap = BitmapFactory.decodeByteArray(b, 0, b.length, null); BitmapDrawable bitmapDrawable = new BitmapDrawable(bitmap); Drawable drawable = bitmapDrawable; 运行效果如下:
分享到:
收藏