我正在从我的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);
}
答案 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