原文地址:
上(原理):http://blog.csdn.net/floodingfire/article/details/8144604
中(相册):http://blog.csdn.net/floodingfire/article/details/8144615
下(相机):http://blog.csdn.net/floodingfire/article/details/8144617
重要点:
1.
附加选项 | 数据类型 | 描述 |
crop | String | 发送裁剪信号 |
aspectX | int | X方向上的比例 |
aspectY | int | Y方向上的比例 |
outputX | int | 裁剪区的宽 |
outputY | int | 裁剪区的高 |
scale | boolean | 是否保留比例 |
return-data | boolean | 是否将数据保留在Bitmap中返回 |
data | Parcelable | 相应的Bitmap数据 |
circleCrop | String | 圆形裁剪区域? |
MediaStore.EXTRA_OUTPUT ("output") | URI | 将URI指向相应的file:///...,详见代码示例 |
此图的scale标志:true表示无论如何拖动都已经固定了裁剪框的大小。
return-data:如果裁剪的图片过大,不宜保存在内存中,最好通过Uri来保存,可以试着return-data为false,通过MediaStore.EXTRA_OUTPUT的uri来保存。
拍照时可以利用tempUri,相册选取时利用data.getExtras返回的Uri直接设置即可。
注意:uri必须以file://开头,不然会导致“无法保存剪裁的图片”的错误。
2.安卓默认允许的应用内存为16M,查看Bitmap的Config可以看到
public static final Bitmap.Config ALPHA_8
public static final Bitmap.Config ARGB_4444
public static final Bitmap.Config ARGB_8888
public static final Bitmap.Config RGB_565
这四种枚举值代表图片的存储方式,A为alpha,R为red,G为green,B为blue。
所以可知其位数:
public static final Bitmap.Config ALPHA_8,位数8
public static final Bitmap.Config ARGB_4444 ,位数4+4+4+4 = 16
public static final Bitmap.Config ARGB_8888,位数8+8+8+8 = 32
public static final Bitmap.Config RGB_565,位数5+6+5 = 16
计算加载bitmap所需内存时,用像素值*位数即可,eg:1920*1080*32 表示1920*1080的存储方式为ARGB_8888的位图