在VCard中存储图像并手动在Android代码中读取它

时间:2015-01-07 16:37:56

标签: android base64 vcard

我正在从我的Android应用程序创建vCard文件。 我手动存储数据(不使用任何libray) 我能够在我的app中编写数据,读取和解析它。但是当我保存Image时。我有两个问题。

1)我无法保存使用相机捕获的图像。当将基本64位编码的字符串写入vcard时,它会抛出一个记忆异常。

2)我能够保存我从画廊中拍摄的某些图像的基本64位编码字符串,但是在阅读时它并没有让我得到图像。我正在逐行处理来自vCard的所有数据和base64编码字符串不是单行。(请注意,我使用\ r \ n将每个值存储到文件中)

请让我知道这样做的正确方法。

代码段

编码

                ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();  
                bm.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream);
                byte[] byteArray = byteArrayOutputStream .toByteArray();
                encodedProfileImage = Base64.encodeToString(byteArray, Base64.DEFAULT);

书写

fw = new FileWriter(vcfFile);

...

fw.write("PHOTO;ENCODING=BASE64;TYPE=PNG:"+encodedProfileImage + "\r\n");

阅读和解码

else if(strline[0].equals("PHOTO;ENCODING=BASE64;TYPE=PNG")){
                                 String imagestr=strline[1];
                                 byte[] byteArray = Base64.decode(imagestr, Base64.DEFAULT);
                                 card.profileImage = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);

                             }    

1 个答案:

答案 0 :(得分:0)

在阅读时,您可以使用BitmapFactory.Options

http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html

使用以BitmapFactory.Options作为最后一个参数的decodeByteArray调用。

如果您设置inSampleSize = 2

它会将传入图像的大小减小到可管理的状态。

  BitmapFactory.Options options = new BitmapFactory.Options();
  options.inSampleSize = 2; //Scale it down
  options.inPreferredConfig = Bitmap.Config.RBG_565; // Less memory