如何在Sqlite数据库中插入图像?

时间:2015-03-19 05:10:38

标签: android android-activity

这里我想在数据库中发送我的图片..但是我无法将imgPro分配给values.put ..请帮助我..

else if (requestCode == 2) {

            Uri selectedImage = data.getData();
            String[] filePath = { MediaStore.Images.Media.DATA };
            Cursor c = getContentResolver().query(selectedImage, filePath, null, null, null);
            c.moveToFirst();
            int columnIndex = c.getColumnIndex(filePath[0]);
            String picturePath = c.getString(columnIndex);
            c.close();
            Bitmap thumbnail = (BitmapFactory.decodeFile(picturePath));
            imgPro.setImageBitmap(thumbnail);


        }

1 个答案:

答案 0 :(得分:0)

你可以这样做。

   public class ImageConverter {

    public static String imageToStringConverter(Bitmap image){
        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        image.compress(Bitmap.CompressFormat.PNG, 100, stream);
        byte[] byteArray = stream.toByteArray();
        String imageToString = Base64.encodeToString(byteArray, Base64.NO_WRAP);
        return imageToString;
    }

    public static Bitmap stringToimageConverter(String imageString){
        byte[] stringTobyte = Base64.decode(imageString, Base64.NO_WRAP);
        Bitmap bmp = BitmapFactory.decodeByteArray(stringTobyte, 0, stringTobyte.length);
        return bmp;
    }

}

您将调用此两个函数将图像转换为字符串,然后保存在数据库中。如下所示

String statusImage = ImageConverter.imageToStringConverter(selectedImage);

selectedImage是您从文件中选择的位图。如果你想显示图像,那么再次将字符串转换回图像 现在为什么Base64 ??

  

如果您想要通过网络发送某些二进制数据,   你通常不会只通过流式传输比特和字节来实现   原始格式的电线。为什么?因为有些媒体是为了制作的   流文本。你永远不知道 - 一些协议可能会解释你的   二进制数据作为控制字符(如调制解调器)或二进制数据   因为底层协议可能会这么想而搞砸了   你输入了一个特殊的角色组合(比如FTP   翻译行结尾)。

     

因此,为了解决这个问题,人们将二进制数据编码为字符。   Base64是这些类型的编码之一。为什么64?因为你能   通常依赖于许多人中存在的相同的64个字符   字符集,你可以合理地确信你的数据   最终会在电线的另一端不受损坏。