Android数据库中存取图片通常使用两种方式,一种是保存图片所在路径,二是将图片以二进制的形式存储(sqlite3支持BLOB数据类型)。对于两种方法的使用,好像第二种方法不如第一种方法更受程序员欢迎,他们认为,在很多数据库语言里,处理大字段都是不容易的,像图片这样的文件放在数据库里会有问题:对数据库的读写速度永远赶不上文件系统的处理速度,使数据库变得巨大;但也有很多人认为像图片这样的数据存放在数据库中也有好处:易于备份,且备份速度绝对比备份文件快,比较容易数据迁移等等。其实这两种方法都有优缺点,具体使用哪种方法要视情况而定。个人倾向于使用数据库存取图片,因为个人认为存到数据库里的数据不会因外部数据的变化而丢失改变,比如你拍照获得一张图片,如果是将路径存到数据库,当这张照片被删除之后,下次读取数据库就得不到想要的结果了。接下来详细介绍数据库存取图片的方法:

  1.从资源中获取Bitmap对象

1     Resources res = getResources();2     Bitmap bmp = BitmapFactory.decodeResource(res, R.drawable.icon);

 

 

  2.把图片转换成字节

复制代码
1 public byte[] img(int id)2 {3      ByteArrayOutputStream baos = new ByteArrayOutputStream();4      Bitmap bitmap = ((BitmapDrawable) getResources().getDrawable(id)).getBitmap();5      bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);6      return baos.toByteArray();7 }
复制代码

 

  3.在数据库中插入图片

复制代码
//在数据库创建时,图片字段的数据类型存储为 BLOB数据库插入操作public void onCreate(SQLiteDatabase db){     String sql = "create table " + TB_NAME + " ( " + ID + " integer primary key , " + IMAGE + " BLOB ) ";    db.execSQL(sql);} //将图片一字节形式存储数据库读取操作public long insert(byte[] img) {     SQLiteDatabase db = getWritableDatabase();    ContentValues cv = new ContentValues();    cv.put(IMAGE, img);    long result = db.insert(TB_NAME, null, cv);    return result;}
复制代码

 

  4.获取存入数据库的图片(Bitmap)

复制代码
public Bitmap getBmp(int position) {    SQLiteDatabase db = getReadableDatabase();    Cursor cursor = select(TB_NAME);    cursor.moveToPosition(position);    byte[] in = cursor.getBlob(cursor.getColumnIndex(IMAGE));    Bitmap bmpout = BitmapFactory.decodeByteArray(in, 0, in.length);    return bmpout;}
复制代码

  //imgView.setImageBitmap(bm);

 

  5.转换获取的图片(Bitmap)为Drawable

复制代码
1 public Drawable chage_to_drawable(Bitmap bp)2 {3     //因为BtimapDrawable是Drawable的子类,最终直接使用bd对象即可。4     Bitmap bm=bp; 5     BitmapDrawable bd= new BitmapDrawable(getResource(), bm); 6     return bd;7 }
复制代码

更多相关文章

  1. 学习笔记之——Android中的Picasso实现圆形头像、圆角图片工具类
  2. ndroid显示在线图片
  3. Android 根据所给的图片位置获得Thumbnail
  4. Android HttpURLConnection上传图片至Servlet端指定目录
  5. Android开发之如何手写代码进行页面布局
  6. Android当中显示网络图片
  7. Android跳转淘宝商品详情页代码
  8. android通过Intent调用手机图片,音频,视频录音拍照等代码

随机推荐

  1. android Manifest.xml全局配置文件中根标
  2. Android7.0、8.0应用内安装apk的问题
  3. Android(安卓)自定义时间选择器
  4. Android中给View设置阴影的三种方式
  5. 【Android应用开发】-(7)安全性设计(完整版
  6. Android如何在三年时间里征服移动世界的
  7. 集成Flutter混合开发(入坑篇)
  8. 使用Kotlin高效地开发Android(安卓)App(
  9. Eclipse的项目迁移到Android(安卓)Studio
  10. air for android :第一个Android