如何简单地利用Bitmap为中介储存图片到数据库中

这是我的第一篇博文,请大家多多指教!

大概一个月之前,在跟朋友合作开发一个APP的过程中,我们发现到一个问题:图片的存储。因为数据库没有图片这种数据类型,当用户上传的图片需要存储的时候,我们无法将其直接放进数据库中。

在经历了几天的探索,结合郭神的《第二行代码》调用摄像头拍照以及从相册中选择图片这两小节,我们发现了Android里面的一个图片类:Bitmap。最终发现,利用Bitmap及其相关的工具类即可实现图片的存储以及显示。 

      主要用到的工具类:
     

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.Base64;

import java.io.ByteArrayOutputStream;

/**
 * Created by cartoon on 2017/12/9.
 */

public class StringAndBitmap {
    //图片与String之间的转换,便于将图片存储在数据库中
    private Bitmap bitmap;
    private String string;
    public Bitmap stringToBitmap(String string){
        //数据库中的String类型转换成Bitmap
        if(string!=null){
            byte[] bytes= Base64.decode(string,Base64.DEFAULT);
            bitmap= BitmapFactory.decodeByteArray(bytes,0,bytes.length);
            return bitmap;
        }
        else {
            return null;
        }
    }
    public String bitmapToString(Bitmap bitmap){
        //用户在活动中上传的图片转换成String进行存储
        if(bitmap!=null){
            ByteArrayOutputStream stream = new ByteArrayOutputStream();
            bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
            byte[] bytes = stream.toByteArray();// 转为byte数组
            string=Base64.encodeToString(bytes,Base64.DEFAULT);
            return string;
        }
        else{
            return "";
        }
    }
}

下面已经获取到数据库中已经存储了的图片的String语句string,只需要在需要显示图片的组件中调用关于显示Bitmap的方法即可。

imageView.setImageBitmap(stringAndBitmap.stringToBitmap(string);
//这里的imageView为页面组件绑定的ID,string为从数据库获取到图片的string形态

而存储用户上传的图片则需要这样即可。

bitmap=((BitmapDrawable)imageView.getDrawable()).getBitmap();
string=stringAndBitmap.bitmapToString(bitmap);

经过一些数据库的操作,即可以把用户上传的图片存入到数据库中。

因为数据库部分不是我负责的,所以我的建议是数据库中的类型选择BLOB(MySQL),因为已经实现过是可行的。

以上就是之前开发的一点小技巧,也是经过痛领会出来的。我们还没有测试过资源的消耗以及延时的情况,但确实是可以存储图片到数据库中的。

如果你们有任何对这篇博文的建议或者意见的话,欢迎私信或者在下方评论。最重要的是可以帮助到像我们一样的入门者。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以通过以下步骤将SQLite数据库的已转换为byte类型的图片显示在ListView: 1. 创建一个包含图片和其他数据的SQLite数据库表格。 2. 在应用程序查询该数据库,并将结果存储在Cursor对象。 3. 使用SimpleCursorAdapter将Cursor对象的数据绑定到ListView上。 4. 在SimpleCursorAdapter指定一个ViewBinder,以便在绑定时将字节数组转换为位图并将其设置为ImageView的图像。 以下是实现步骤的示例代码: 1. 创建数据库表格 ```sql CREATE TABLE mytable ( _id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, image BLOB ); ``` 2. 查询数据库 ```java Cursor cursor = db.rawQuery("SELECT * FROM mytable", null); ``` 3. 绑定数据到ListView ```java String[] from = { "name", "image" }; int[] to = { R.id.text_name, R.id.image_view }; SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.list_item, cursor, from, to); adapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() { @Override public boolean setViewValue(View view, Cursor cursor, int columnIndex) { if (view.getId() == R.id.image_view) { byte[] imageBytes = cursor.getBlob(columnIndex); Bitmap bitmap = BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.length); ImageView imageView = (ImageView) view; imageView.setImageBitmap(bitmap); return true; } return false; } }); listView.setAdapter(adapter); ``` 在以上代码,我们指定了一个ViewBinder来处理ImageView的图像。在ViewBinder的setViewValue()方法,我们检查当前的视图是否为ImageView,如果是,则将字节数组转换为位图并将其设置为ImageView的图像。 希望能对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值