本来打算用数据库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; }
相关推荐
本作业主要探讨了如何在Android Studio项目中实现图片的存取以及将图片存储到数据库中的技术。我们将围绕以下几点进行深入讨论: 1. **图片存储方式** 在Android中,图片可以存储在多种位置,如内部存储、外部存储...
1. **图片转换为二进制流**:图片文件是二进制数据,需要将其转换成可以插入数据库的格式。这通常通过读取图片文件,将其内容读入内存并转化为`byte[]`数组来实现。 2. **创建数据库表结构**:在数据库中,我们需要...
在IT领域,数据库存储不仅仅是...综上所述,"网数据库存取图片"是一个涉及数据库设计、编程接口、性能优化以及安全性等多个方面的复杂过程。理解并掌握这些知识点对于构建一个高效、安全的图片存储和检索系统至关重要。
以下将详细解释如何在PB9中进行数据库存取图片的操作。 首先,我们需要创建一个能够存储图片的数据库表。这个表通常会包含一个或多个字段,其中一个是BLOB类型的字段,例如“ImageData”。在SQL数据库(如MySQL、...
### JSPSmartUpload 实现数据库中的图片存取 #### 一、引言 在Web开发中,经常需要处理用户上传的文件,特别是图片文件。传统的做法是将这些文件存储在服务器的文件系统中,但这种方法可能会导致文件管理复杂度...
总结,C#图片数据库存取涉及数据库选择、数据交互方式、图片的二进制存储、元数据管理、查询和检索以及性能优化和安全措施等多个方面。理解并掌握这些知识点,能够帮助开发者构建出高效、安全的图片管理系统。
图片文件在SQL Server数据库的存取 在实际开发中,我们经常需要将图片文件存储到SQL Server数据库中,并在需要时从数据库中取出。本文将详细介绍如何使用C#语言实现图片文件在SQL Server数据库的存取。 数据库表...
以下是一个简化的VB代码示例,演示了如何存取图片到数据库: ```vb Imports ADODB Imports System.IO ' 连接数据库 Dim conn As New Connection conn.ConnectionString = "your_connection_string" ' 存储图片 ...
综上所述,ASP.NET与SQL Server数据库的图片存取操作是一项综合性的技术,它不仅要求对数据库操作有深入了解,还需要掌握ASP.NET的文件上传、流操作以及响应处理机制。通过以上步骤,开发者可以构建出能够有效管理...
在IT领域,数据库管理是核心任务之一,而存储非结构化数据如图片是常见的需求。在本场景中,我们将探讨如何使用Microsoft Access作为数据库来存储和检索图片,并使用VB.NET进行编程实现图片在DataGridView控件中的...
本文将详细讲解如何在MFC应用中利用Access数据库存储和访问图片。 首先,我们需要创建一个MFC项目,并设置好数据库连接。在MFC项目中,可以使用ADO(ActiveX Data Objects)或者DAO(Data Access Objects)来与...
在C#编程中,数据库存取图片涉及到的主要技术是数据库操作和二进制数据处理。以下将详细讲解如何使用C#来实现这一功能。 首先,我们需要了解基础的数据库概念。在C#中,通常会使用ADO.NET框架来与各种数据库(如SQL...
在Java编程中,访问数据库存取图片涉及到一系列的步骤和技术,主要依赖于Java Database Connectivity (JDBC) API来实现。本篇文章将详细讲解如何利用Java和JDBC与SQL Server 2000或其他数据库交互,以存储和检索图片...
在C#编程中,将图片存入数据库以及从数据库中取出是常见的操作,尤其是在构建包含多媒体元素的应用程序时。本文将深入探讨如何使用C#与数据库进行图片的存储和读取,主要涉及以下知识点: 1. 数据库选择:首先,...
这个例子展示了如何在C#中实现数据库的图片存取,包括文件读写、数据库操作以及与前端的交互。这是一项基本但重要的技能,对于开发涉及大量媒体数据的项目非常有用。通过这种方式,我们可以有效地存储和检索大量的...
根据给定文件的信息,本文将围绕“图片数据库存取”这一主题进行深入解析,并结合具体实例探讨采用DelPHI编程实现多媒体数据管理的有效途径。文章首先介绍了多媒体数据在地理信息系统(GIS)中的重要性,随后分析了...
"图片存取_mdb_mdb图片导出_图片存取"这个主题涉及如何在MDB数据库中管理和操作图片数据。 首先,我们来讨论如何将照片存入MDB数据库。在Access中,可以创建一个字段类型为"OLE对象"的字段来存储图像。当你在表中...
Android ListView 控件显示数据库中图片 Android ListView 控件是 Android 开发中常用的控件之一,但是在创建 ListView 时,总是感觉步骤繁琐,这里对其进行总结,方便查阅。程序的效果是实现一个显示联系人的简单...
标签“PB 图片 图片存取 ASA 数据库”进一步强调了关键知识点,包括PB的图片处理,图片的存取机制,以及与ASA数据库的接口。在PB中处理图片,可能涉及Image控件,可以用来显示或让用户选择图片。图片的存取则涉及到...
Android 利用 LitePal 操作数据库存取图片 Android 中存取图片是移动应用程序中常见的需求,通常有两种方式来存取图片:一种是保存图片所在路径,另一种是将图片以二进制的形式存储。在Android中,LitePal 是一个...