Android 使用intent对Bitmap的处理(拍照、裁剪、从图库选择)

原文地址:

上(原理):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的位图

你可能感兴趣的:(Android)