在Android中图片的三种类型形式是Bitmap,Drawable和byte[],Google原始的代码中,存在联系人数据库里面的联系人头像就是byte[]类型的。但是为保证数据库不会过大,图片都是要经过压缩之后再保存的。
众所周知,联系人都是有导出导入功能的,导出时就是取的数据库中保存的压缩过的头像,那么如果导入时再次压缩,联系人头像经过多次导出导入之后,头像就会越来越模糊。产生这种情况的原因是导入时和新建联系人设置头像时都走了同一个压缩方法,而且根本没办法区分是新建联系人还是导入。那么通过变量来区分是行不通的,或者说是代价太大。经过输出LOG发现,两者在压缩前后byte[]的长度,即头像的实际文件大小变化是不同的。也就是说,新建联系人时,头像压缩前比压缩后大,而导入恰恰相反。那么就可以以此区分是新建还是导入。产生这种情况原因如下:
1.Bitmap和byte[]之间的相互转换方法
private Bitmap byteToBitmap(byte[] bitmapToByte) { // TODO Auto-generated method stub return BitmapFactory.decodeByteArray(bitmapToByte, 0, bitmapToByte.length); }
private byte[] bitmapToByte(Bitmap bitmap) { // TODO Auto-generated method stub ByteArrayOutputStream baos =new ByteArrayOutputS