`
mpqi
  • 浏览: 78000 次
  • 性别: Icon_minigender_2
  • 来自: 成都
社区版块
存档分类
最新评论

Bitmap Drawable byte[] 三者之间的转换以及把数组存入数据库及提取数据重新组合成所需对象,如图像

 
阅读更多

本文引自:http://www.cnblogs.com/enricozhang/archive/2011/09/29/2195601.html

1.创建数据库表的时候选择存图片的字段类型为blob

StringBuffer createTableOfHistory = new StringBuffer();
createTableOfHistory.append("CREATE TABLE "+某表名);
createTableOfHistory.append(" ( _id INTEGER PRIMARY KEY AUTOINCREMENT ,");
createTableOfHistory.append(该存图片的字段名+" BLOB ,");
createTableOfHistory.append(其他字段名1+" TEXT ,");

//.......

createTableOfHistory.append(其他字段名n+" TEXT );");//记得这里带个“;”封号
db.execSQL(createTableOfHistory.toString());//执行该创表语句

 

2.存储数据

    2.2.将Bitmap对象转换成数组的方法【包含从资源文件中获得图片对象Bitmap】

 

Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.icon);

  private static byte[] bitmapToBytes(Bitmap bitmap){
  if (bitmap == null) {
     return null;
  }
  final ByteArrayOutputStream os = new ByteArrayOutputStream();
  // 将Bitmap压缩成PNG编码,质量为100%存储
  bitmap.compress(Bitmap.CompressFormat.PNG, 100, os);//除了PNG还有很多常见格式,如jpeg等。
  return os.toByteArray();
 }

 

  ContentValues values = new ContentValues();
  values.put(该存图片的字段名, readHistoryInfo.getBookIcon());
  values.put(其他字段名1, “2011-05-17”);

  //......

  return mSqliteDatabase.insert(表名, null, values);//插入数据

 

3.提取数据库中的数组数据并转换成Bitmap或DrawableBitmap对象【包含byte[] —> Bitmap】

某类对象m(该类是负责创表,删表,插入数据,删除数据类).openOrCreateDB();//openOrCreateDB()也是该类的一个打开或创建数据库的方法。

Cursor cursor = 某类对象m.getData(该存图片的字段名, null);
if (cursor.moveToFirst()) {

   // byte[] —> Bitmap
   byte[] bytes = cursor.getBlob(cursor.getColumnIndex(该存图片的字段名));
   Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length, null);
   BitmapDrawable bitmapDrawable = new BitmapDrawable(bitmap);

}

 

 

4.Drawable —> Bitmap

Bitmap bm = xxx; //xxx根据你的情况获取
  BitmapDrawable bd= new BitmapDrawable(bm); 

  提示:因为BtimapDrawable是Drawable的子类,最终直接使用bd对象即可。
public static Bitmap drawableToBitmap(Drawable drawable) {
         
        Bitmap bitmap = Bitmap.createBitmap(
                                   drawable.getIntrinsicWidth(),
                                   drawable.getIntrinsicHeight(),
                                   drawable.getOpacity() != PixelFormat.OPAQUE ? 

                                   Bitmap.Config.ARGB_8888: Bitmap.Config.RGB_565);
        return bitmap;
  }
  Drawable d=xxx; //xxx根据自己的情况获取drawable
  BitmapDrawable bd = (BitmapDrawable) d;
  Bitmap bm = bd.getBitmap(); 

 

 

   2.1将数据流转成数组的方法

InputStream inputStream = getResources().openRawResource(R.drawable.icon);

  private static byte[] streamToBytes(InputStream is) {
        ByteArrayOutputStream os = new ByteArrayOutputStream(1024);
        byte[] buffer = new byte[1024];
        int len;
        try {
            while ((len = is.read(buffer)) >= 0) {
                os.write(buffer, 0, len);
            }
        } catch (java.io.IOException e) {
        }
        return os.toByteArray();
  }

 

 

分享到:
评论

相关推荐

    将Bitmap转换为Byte[]

    在VC(Visual C++)环境下,Bitmap对象是用于表示图像的一种常见数据结构,而`Byte[]`(字节数组)则常用于数据传输或存储。本篇文章将详细解释如何在VC中将Bitmap对象转换为Byte数组。 首先,理解Bitmap对象。...

    Drawable Bitmap InputStream byte[]相互转化工具类

    在Android开发中,处理图像数据时,我们经常需要在Drawable、Bitmap、InputStream和byte数组之间进行转换。这些类型的转换在不同的场景下具有重要的作用,例如从网络加载图片、存储图片到本地或者显示在ImageView上...

    android_Drawable、Bitmap、byte[]之间的转换.doc

    本文将详细介绍`Drawable`、`Bitmap`及`byte[]`三者之间的转换方法,并提供具体的实现代码。 #### 1. Drawable转Bitmap `Drawable`是Android中用于表示图像的一种抽象类,它并不直接表示图像数据,而是通过不同的...

    Android Drawable、Bitmap、byte、灰度 之间的转换

    在Android开发中,图片资源的处理是常见的需求之一,尤其涉及到不同格式间的转换,如Drawable、Bitmap、byte数组以及灰度图像的转换。这些转换在实际应用中具有重要意义,不仅能够优化内存使用,还能实现图像的高效...

    Android Drawable、Bitmap、byte、灰度 转换

    在Android开发中,图片资源的处理是常见的需求之一,涉及到多种数据类型之间的转换,包括`Drawable`、`Bitmap`、`byte[]`等。本文将详细介绍这些类型之间的转换方法,以及如何实现灰度图像的转换。 ### 1. `...

    将Bitmap转成byte[]小例子

    在Android开发中,Bitmap是用于表示图像数据的一种对象,它在内存中占用较大空间,因此在处理图片时,我们有时需要将其转换为byte数组(byte[]),以便于存储、传输或者在网络流中使用。这个过程涉及到图像数据的...

    C#中将byte数组转换为8bit灰度图像

    在C#编程语言中,将byte数组转换为8bit灰度图像是一项常见且重要的技能,尤其是在处理图像数据或开发图像处理应用时。本文将详细解析这一过程,包括关键概念、技术细节以及具体实现步骤。 ### 关键概念 1. **8bit...

    C#中bitmap、stream、byte类型转换实例

    在处理图像时,我们可能会遇到需要在不同的数据类型之间转换的情况,比如从Bitmap到Stream,再到byte数组,最后再还原回Bitmap。这样的转换在上传图片、存储图片数据或在网络中传输时非常常见。本篇文章将详细介绍...

    Android Drawable Bitmap 相互转换

    - 当Drawable包含动画时(如Animatable),转换成Bitmap可能会丢失动画效果。 - 使用`Drawable.ConstantState`可以复用Drawable,减少内存开销,但不适用于所有类型的Drawable。 4. **应用场景** - Bitmap更...

    Bitmap,byte[],Drawable相互转化

    1. **Bitmap转byte[]**:Bitmap对象可以通过`compress()`方法压缩成字节数组,通常会选择特定的格式如PNG或JPEG,并设置压缩质量。例如,`bm.compress(Bitmap.CompressFormat.PNG, 100, baos)`将Bitmap对象压缩为PNG...

    android bitmap通过byte数组以流的形式创建

    在Android开发中,Bitmap是用于显示图像的基本类,它是一个位图对象,通常用来加载、显示和处理图片。然而,由于Bitmap对象占用大量的内存,直接加载大图片可能会导致内存溢出(Out Of Memory,OOM)问题。因此,...

    Drawable Bitmap之间的转化

    本文将详细介绍如何在Android中实现`Drawable`与`Bitmap`之间的相互转换,并探讨这两种类型的图像数据在实际应用中的应用场景。 #### 一、Drawable简介 `Drawable`是Android中用于表示图形的一种抽象类,它可以是...

    Halcon_Bitmap转换

    在VC中使用Halcon进行图像处理,首先需掌握如何读取图像文件以及获取图像的内存指针。`read_image()` 和 `get_image_pointer1()` 是两个关键函数,它们分别用于读取图像文件和获取指向图像数据的内存指针。在Halcon...

    BMP(Bitmap)生成器,纯C++实现由数组生成位图

    位图(Bitmap,通常缩写为BMP)是一种常见的图像文件格式,广泛应用于Windows操作系统以及许多其他软件中。BMP文件格式是未经压缩的,它存储了图像的每个像素的颜色信息,因此文件体积相对较大。在C++编程中,生成...

    把真彩色BMP位图转化为二维数组

    ### 把真彩色BMP位图转化为二维数组 在计算机编程与图像处理领域,将BMP格式的位图转换为二维数组是一项非常实用的技术。这种技术不仅能够帮助开发者更好地理解和操作图像数据,还在诸如机器人视觉识别等应用中扮演...

    C#byte数组与Image的相互转换实例代码

    2、把从数据库读取的byte数组转换为Image对象,赋值给相应的控件显示。 3、从图片byte数组得到对应图片的格式,生成一张图片保存到磁盘上。 这里的Image是System.Drawing.Image。 //Get an image from file Image...

    Bitmap图像转换为H264

    Bitmap图像转换为H264是一项在数字视频处理和多媒体应用中常见的技术。Bitmap(BMP)是一种无损的图像文件格式,它以原始的像素数据存储图像,占用的存储空间较大,不适合在网络传输和存储中使用。而H264(也称为AVC...

    halcon和c++之间的图像数据转换

    在这种情况下,我们需要从HALCON的图像对象(HObject)中提取像素数据,进行处理后再将结果写回HObject。本示例中,我们将在VS2010上实现一个简单的图像处理流程,包括读取图像、拉普拉斯边缘检测、读取RGB像素数据...

    Android图片Bitmap和字符串String之间的相互转换

    在Android开发中,处理图像数据是一项常见的任务,而Bitmap和String是两个核心的数据类型,分别代表位图图像和文本字符串。Bitmap对象用于存储和显示图像,而String则常用于保存和传输文本信息。本篇文章将深入探讨...

    Bitmap,BitmapDrawable,Drawable.doc

    在深入探讨Bitmap、BitmapDrawable与Drawable之间的关系以及它们之间的转换之前,我们首先需要明确这三种类型的基本概念和各自的功能。 ### Drawable Drawable是Android中一个非常基础且重要的接口,它代表了可以...

Global site tag (gtag.js) - Google Analytics