`
bell0901
  • 浏览: 28568 次
社区版块
存档分类
最新评论

Android数据库存取图片以及转换成缩略图

阅读更多

  本来打算用数据库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;
    }
分享到:
评论

相关推荐

    图片存取+数据库存取图片.rar

    本作业主要探讨了如何在Android Studio项目中实现图片的存取以及将图片存储到数据库中的技术。我们将围绕以下几点进行深入讨论: 1. **图片存储方式** 在Android中,图片可以存储在多种位置,如内部存储、外部存储...

    利用数据库存取图片,从数据库读取显示出来

    1. **图片转换为二进制流**:图片文件是二进制数据,需要将其转换成可以插入数据库的格式。这通常通过读取图片文件,将其内容读入内存并转化为`byte[]`数组来实现。 2. **创建数据库表结构**:在数据库中,我们需要...

    网数据库存取图片

    在IT领域,数据库存储不仅仅是...综上所述,"网数据库存取图片"是一个涉及数据库设计、编程接口、性能优化以及安全性等多个方面的复杂过程。理解并掌握这些知识点对于构建一个高效、安全的图片存储和检索系统至关重要。

    PB9数据库存取图片

    以下将详细解释如何在PB9中进行数据库存取图片的操作。 首先,我们需要创建一个能够存储图片的数据库表。这个表通常会包含一个或多个字段,其中一个是BLOB类型的字段,例如“ImageData”。在SQL数据库(如MySQL、...

    JSP在数据库中存取图片

    ### JSPSmartUpload 实现数据库中的图片存取 #### 一、引言 在Web开发中,经常需要处理用户上传的文件,特别是图片文件。传统的做法是将这些文件存储在服务器的文件系统中,但这种方法可能会导致文件管理复杂度...

    C# 图片数据库存取示例

    总结,C#图片数据库存取涉及数据库选择、数据交互方式、图片的二进制存储、元数据管理、查询和检索以及性能优化和安全措施等多个方面。理解并掌握这些知识点,能够帮助开发者构建出高效、安全的图片管理系统。

    图片文件在SQL Server数据库的存取

    图片文件在SQL Server数据库的存取 在实际开发中,我们经常需要将图片文件存储到SQL Server数据库中,并在需要时从数据库中取出。本文将详细介绍如何使用C#语言实现图片文件在SQL Server数据库的存取。 数据库表...

    VB 数据库存取图片 示例代码

    以下是一个简化的VB代码示例,演示了如何存取图片到数据库: ```vb Imports ADODB Imports System.IO ' 连接数据库 Dim conn As New Connection conn.ConnectionString = "your_connection_string" ' 存储图片 ...

    ASP.NET如何存取SQL Server数据库图片

    综上所述,ASP.NET与SQL Server数据库的图片存取操作是一项综合性的技术,它不仅要求对数据库操作有深入了解,还需要掌握ASP.NET的文件上传、流操作以及响应处理机制。通过以上步骤,开发者可以构建出能够有效管理...

    数据库中存取图片

    在IT领域,数据库管理是核心任务之一,而存储非结构化数据如图片是常见的需求。在本场景中,我们将探讨如何使用Microsoft Access作为数据库来存储和检索图片,并使用VB.NET进行编程实现图片在DataGridView控件中的...

    mfc+access数据库,加入存取图片

    本文将详细讲解如何在MFC应用中利用Access数据库存储和访问图片。 首先,我们需要创建一个MFC项目,并设置好数据库连接。在MFC项目中,可以使用ADO(ActiveX Data Objects)或者DAO(Data Access Objects)来与...

    C#数据库存取图片

    在C#编程中,数据库存取图片涉及到的主要技术是数据库操作和二进制数据处理。以下将详细讲解如何使用C#来实现这一功能。 首先,我们需要了解基础的数据库概念。在C#中,通常会使用ADO.NET框架来与各种数据库(如SQL...

    Java访问数据库存取图片

    在Java编程中,访问数据库存取图片涉及到一系列的步骤和技术,主要依赖于Java Database Connectivity (JDBC) API来实现。本篇文章将详细讲解如何利用Java和JDBC与SQL Server 2000或其他数据库交互,以存储和检索图片...

    C#数据库存取图片详细

    在C#编程中,将图片存入数据库以及从数据库中取出是常见的操作,尤其是在构建包含多媒体元素的应用程序时。本文将深入探讨如何使用C#与数据库进行图片的存储和读取,主要涉及以下知识点: 1. 数据库选择:首先,...

    C#实现数据库的图片存取

    这个例子展示了如何在C#中实现数据库的图片存取,包括文件读写、数据库操作以及与前端的交互。这是一项基本但重要的技能,对于开发涉及大量媒体数据的项目非常有用。通过这种方式,我们可以有效地存储和检索大量的...

    图片数据库存取.pdf

    根据给定文件的信息,本文将围绕“图片数据库存取”这一主题进行深入解析,并结合具体实例探讨采用DelPHI编程实现多媒体数据管理的有效途径。文章首先介绍了多媒体数据在地理信息系统(GIS)中的重要性,随后分析了...

    图片存取_mdb_mdb图片导出_图片存取_

    "图片存取_mdb_mdb图片导出_图片存取"这个主题涉及如何在MDB数据库中管理和操作图片数据。 首先,我们来讨论如何将照片存入MDB数据库。在Access中,可以创建一个字段类型为"OLE对象"的字段来存储图像。当你在表中...

    Android ListView控件显示数据库中图片

    Android ListView 控件显示数据库中图片 Android ListView 控件是 Android 开发中常用的控件之一,但是在创建 ListView 时,总是感觉步骤繁琐,这里对其进行总结,方便查阅。程序的效果是实现一个显示联系人的简单...

    PB存取图片实例-asa数据库

    标签“PB 图片 图片存取 ASA 数据库”进一步强调了关键知识点,包括PB的图片处理,图片的存取机制,以及与ASA数据库的接口。在PB中处理图片,可能涉及Image控件,可以用来显示或让用户选择图片。图片的存取则涉及到...

    Android利用LitePal操作数据库存取图片

    Android 利用 LitePal 操作数据库存取图片 Android 中存取图片是移动应用程序中常见的需求,通常有两种方式来存取图片:一种是保存图片所在路径,另一种是将图片以二进制的形式存储。在Android中,LitePal 是一个...

Global site tag (gtag.js) - Google Analytics