zoukankan      html  css  js  c++  java
  • Android save pictrue by SQLiteOpenHelper

    原理:图片是二进制文件,所以使用blob类型,将图片转换成字节数组,存储到数据库中。

    方法一:

    public void saveIcon(Bitmap icon) {
            if (icon == null) {
                return;
            }
    
            // 最终图标要保存到浏览器的内部数据库中,系统程序均保存为SQLite格式,Browser也不例外,因为图片是二进制的所以使用字节数组存储数据库的
            // BLOB类型
            final ByteArrayOutputStream os = new ByteArrayOutputStream();
            // 将Bitmap压缩成PNG编码,质量为100%存储        
            icon.compress(Bitmap.CompressFormat.PNG, 100, os); 
            // 构造SQLite的Content对象,这里也可以使用raw
            ContentValues values = new ContentValues(); 
            // 写入数据库的Browser.BookmarkColumns.TOUCH_ICON字段
            values.put(Browser.BookmarkColumns.TOUCH_ICON, os.toByteArray()); 
            
            DBUtil.update(....);//调用更新或者插入到数据库的方法
        }

    方法二:如果数据表入口时一个content:URI

    public void saveIcon(Bitmap icon) {
    if (icon == null) {
    return;
    }
    
    // 最终图标要保存到浏览器的内部数据库中,系统程序均保存为SQLite格式,Browser也不例外,因为图片是二进制的所以使用字节数组存储数据库的
    // BLOB类型
    final ByteArrayOutputStream os = new ByteArrayOutputStream();
    // 将Bitmap压缩成PNG编码,质量为100%存储    
    icon.compress(Bitmap.CompressFormat.PNG, 100, os); 
    // 构造SQLite的Content对象,这里也可以使用raw
    ContentValues values = new ContentValues(); 
    // 写入数据库的Browser.BookmarkColumns.TOUCH_ICON字段
    values.put(Browser.BookmarkColumns.TOUCH_ICON, os.toByteArray()); 
    
    DBUtil.update(....);//调用更新或者插入到数据库的方法
    }

    从数据库中读取:

    byte[] blob = cur.getBlob(cur.getColumnIndex(KEY_IMG));  
    Bitmap bmp = BitmapFactory.decodeByteArray(blob, 0, blob.length);

      

  • 相关阅读:
    【转】什么时候用抽象类,什么时候用接口
    高内聚松耦合在程序设计中如何做到
    如何做高水平的程序项目设计者
    NHibernate条件查询(Criteria Query)
    Oracle学习笔记之表结构修改
    Java集合类和HashMap遍历
    Asp.net中基于Forms验证的角色验证授权
    Springconfig.xml数据库操作Bean配置
    Java 常用排序算法实现快速排序、插入排序、选择、冒泡
    .net消息队列
  • 原文地址:https://www.cnblogs.com/qiengo/p/2487499.html
Copyright © 2011-2022 走看看