本来打算用数据库sqlite存取图片(图片都是相机拍摄的原图),结果导致存入和读取的时候会消耗巨大内存,尤其是从数据库取图片时。所以准备存SDCard代替,但还是记录下如何用数据库存取图片以及转换成缩略图。
表结构一个String和一个Blob。bitmap不能直接存数据库,用BLOB (binary large object)二进制大对象。
String sql = "create table team (name varchar(20) primary key, image blob);";
bitmap先要转换成二进制数组。
public byte[] img(Bitmap bitmap) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos); return baos.toByteArray(); }
插入数据库。(person.getImage()就是一个bitmap)
public void insert(Person person) { SQLiteDatabase db = openHelper.getWritableDatabase(); if (db.isOpen()) { db.execSQL("insert into team(name,image) values (?, ?);", new Object[]{person.getName(), img(person.getImage())}); db.close(); } }
接下来取图片和转换成缩略图。
BitmapFactory.decodeByteArray(in, 0, in.length)可以把取出来的二进制数组in转换成bitmap。
BitmapFactory.Options options = new BitmapFactory.Options(); //解析位图的附加条件
options.inJustDecodeBounds = true; //inJustDecodeBounds设为true,不去解析真实的位图,读取头文件获取基本信息
options.inSampleSize //位图缩放比例,好像实际取值只能是2的幂次方(15取8,17取16,未考证)
最后inJustDecodeBounds = false,接下来就加载缩略图。
public ArrayList<Person> queryAll() { SQLiteDatabase db = openHelper.getReadableDatabase(); if (db.isOpen()) { Cursor cursor = db.rawQuery("select * from team;", null); if (cursor != null && cursor.getCount() > 0) { ArrayList<Person> teamList = new ArrayList<Person>(); String name; Bitmap image; while (cursor.moveToNext()) { name = cursor.getString(0); byte[] in = cursor.getBlob(1); BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; image = BitmapFactory.decodeByteArray(in, 0, in.length, options); int bitmapWidth = options.outWidth; int bitmapHeight = options.outHeight; int x = 180; int dx = bitmapWidth / x; int dy = bitmapHeight / x; if (dx > dy && dy > 1) { options.inSampleSize = dx; } if (dy > dx && dx > 1) { options.inSampleSize = dy; } options.inJustDecodeBounds = false; image = BitmapFactory.decodeByteArray(in, 0, in.length, options); teamList.add(new Person(name, image)); } db.close(); return teamList; } db.close(); return null; } return null; }
相关推荐
利用数据库存取图片,利用数据库存取图片,从数据库读取显示出来不是简单的保存上传图片的路径.
PB9数据库存取图片,可以把图片存入sql数据库,再用pb读取到本地文件夹中
图片数据库存取.pdf 图片数据库存取.pdf 图片数据库存取.pdf 图片数据库存取.pdf 图片数据库存取.pdf
VB 数据库存取图片 示例代码 VB 数据库存取图片 示例代码
JSPSmartUpload实现向数据库中存取图片,通过实例讲解让读者对文件上传组件有更深一步的认识。
C# 图片数据库存取示例 C# 图片数据库存取示例
数据库存储图片作业
实现往SQLServer数据库存入图片和提取图片的功能。
C#数据库存取图片,保存和读取
使用Access为数据库将图片以二进制形式存取,并在DataGridView中显示,使用VB.NET。
现在把图片存到数据库里面,用二进制流
ASP.NET如何存取SQL Server数据库图片
SQL 论文 课程资源 设计 SQL数据库里存取图片SQL数据库里存取图片
图片文件在SQL Server数据库的存取 资源源于不但搜索,自由源于不但努力
使用JDBC访问数据库并存取图片。使用SQL SERVER2000数据库做示例,其他数据库也是一样的。
java 数据库中图片文件的存取 java 数据库中图片文件的存取 java 数据库中图片文件的存取
与路径存储方式不同,是在数据库层面对图片图像进行存取操作
java对sql数据库存取图片代码的简单示例。
Android数据库中存取图片通常使用两种方式,一种是保存图片所在路径,二是将图片以二进制的形式存储(sqlite3支持BLOB数据类型)。对于两种方法的使用,好像第二种方法不如第一种方法更受程序员欢迎,他们认为,在很...
Android文件存取与数据库编程知识 pdf Android文件存取与数据库编程知识 pdf