`

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

阅读更多

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

 

Java代码 复制代码 收藏代码
  1. StringBuffer createTableOfHistory = new StringBuffer();
  2. createTableOfHistory.append("CREATE TABLE "+某表名);
  3. createTableOfHistory.append(" ( _id INTEGER PRIMARY KEY AUTOINCREMENT ,");
  4. createTableOfHistory.append(该存图片的字段名+" BLOB ,");
  5. createTableOfHistory.append(其他字段名1+" TEXT ,");
  6. .......
  7. createTableOfHistory.append(其他字段名n+" TEXT );");//记得这里带个“;”封号
  8. db.execSQL(createTableOfHistory.toString());//执行该创表语句
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.1将数据流转成数组的方法

Java代码 复制代码 收藏代码
  1. InputStream inputStream = getResources().openRawResource(R.drawable.icon);
  2. private static byte[] streamToBytes(InputStream is) {
  3. ByteArrayOutputStream os = new ByteArrayOutputStream(1024);
  4. byte[] buffer = new byte[1024];
  5. int len;
  6. try {
  7. while ((len = is.read(buffer)) >= 0) {
  8. os.write(buffer, 0, len);
  9. }
  10. } catch (java.io.IOException e) {
  11. }
  12. return os.toByteArray();
  13. }
 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();
  }

 

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

Java代码 复制代码 收藏代码
  1. Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.icon);
  2. private static byte[] bitmapToBytes(Bitmap bitmap){
  3. if (bitmap == null) {
  4. return null;
  5. }
  6. final ByteArrayOutputStream os = new ByteArrayOutputStream();
  7. // 将Bitmap压缩成PNG编码,质量为100%存储
  8. bitmap.compress(Bitmap.CompressFormat.PNG, 100, os);//除了PNG还有很多常见格式,如jpeg等。
  9. return os.toByteArray();
  10. }
  11. ContentValues values = new ContentValues();
  12. values.put(该存图片的字段名, readHistoryInfo.getBookIcon());
  13. values.put(其他字段名1, “2011-05-17”);
  14. ......
  15. return mSqliteDatabase.insert(表名, null, values);//插入数据
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()也是该类的一个打开或创建数据库的方法。

 

Java代码 复制代码 收藏代码
  1. Cursor cursor = 某类对象m.getData(该存图片的字段名, null);
  2. if (cursor.moveToFirst()) {
  3. // byte[] —> Bitmap
  4. byte[] bytes = cursor.getBlob(cursor.getColumnIndex(该存图片的字段名));
  5. Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length, null);
  6. BitmapDrawable bitmapDrawable = new BitmapDrawable(bitmap);
  7. }
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

Java代码 复制代码 收藏代码
  1. Bitmap bm = xxx; //xxx根据你的情况获取
  2. BitmapDrawable bd= new BitmapDrawable(bm);
  3. 提示:因为BtimapDrawable是Drawable的子类,最终直接使用bd对象即可。
Bitmap bm = xxx; //xxx根据你的情况获取
  BitmapDrawable bd= new BitmapDrawable(bm); 

  提示:因为BtimapDrawable是Drawable的子类,最终直接使用bd对象即可。

 

 

5. Drawable —> Bitmap

 

Java代码 复制代码 收藏代码
  1. public static Bitmap drawableToBitmap(Drawable drawable) {
  2. Bitmap bitmap = Bitmap.createBitmap(
  3. drawable.getIntrinsicWidth(),
  4. drawable.getIntrinsicHeight(),
  5. drawable.getOpacity() != PixelFormat.OPAQUE ?
  6. Bitmap.Config.ARGB_8888: Bitmap.Config.RGB_565);
  7. return bitmap;
  8. }
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;
  }

or

 

Java代码 复制代码 收藏代码
  1. Drawable d=xxx; //xxx根据自己的情况获取drawable
  2. BitmapDrawable bd = (BitmapDrawable) d;
  3. Bitmap bm = bd.getBitmap();
  Drawable d=xxx; //xxx根据自己的情况获取drawable
  BitmapDrawable bd = (BitmapDrawable) d;
  Bitmap bm = bd.getBitmap(); 

 

 

分享到:
评论

相关推荐

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

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

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

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

    Android Drawable、Bitmap、byte、灰度 转换

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

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

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

    将Bitmap转换为Byte[]

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

    Android Drawable Bitmap 相互转换

    本篇将详细介绍如何在Android中进行Drawable到Bitmap以及Bitmap到Drawable的转换。 首先,Drawable是一个抽象的概念,它代表了Android系统中的可绘制对象,包括Bitmap、Shape、LevelList、NinePatch等。而Bitmap则...

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

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

    将Bitmap转成byte[]小例子

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

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

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

    Drawable Bitmap之间的转化

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

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

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

    Bitmap,byte[],Drawable相互转化

    Bitmap是Android系统中用于存储和处理图像数据的重要类,它是一个位图,即像素的二维数组,常用于显示和操作图像。BitmapFactory是用于解析图片资源并生成Bitmap对象的工具类,例如`BitmapFactory.decodeResource()`...

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

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

    android平台jpeg数据流转换成rgb直接用bitmap显示数据的so库

    android平台jpeg数据流转换成rgb直接显示的so库 使用方式: byte[] jpegRaw = V4L2Camera.decode(dataBuf, ret); rgb2Buffer(jpegRaw, WIDTH, HEIGHT, rgbBuffer); ByteBuffer jpegBuffer = ByteBuffer.wrap(rgb...

    Android中把bitmap存成BMP格式图片的方法

    在Android开发中,有时我们需要将Bitmap对象转换成不同的图片格式,比如BMP。BMP(Bitmap File Format)是一种常见的位图文件格式,但它并不像JPEG或PNG那样被Android SDK直接支持。本文将详细介绍如何在Android中将...

    Halcon_Bitmap转换

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

    android 画图 bitmap drawable canvas paint

    在Android平台上,绘制图形是一项基本任务,涉及到多个关键类,如Bitmap、Drawable和Canvas,以及Paint。这些类共同构成了Android图形系统的核心,使得开发者能够创建丰富的用户界面和自定义视图。 首先,Bitmap是...

    Bitmap图像转换为H264

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

    android Bitmap用法总结

    Bitmap是Android平台中用于处理图像的核心类,它用于表示位图图像数据。下面是对Bitmap用法的详细总结: 1. **Drawable转换为Bitmap**: 当我们需要将一个Drawable对象(如从XML布局文件中加载的图像)转换为...

Global site tag (gtag.js) - Google Analytics