您的位置:首页 > 移动开发 > Android开发

android中添加图片的两种方式,对图片的自由裁切

2014-08-27 19:51 302 查看
好久没有更新博客了,这几天又要弄一个类似名片的项目,有一个可以自己选择添加照片的功能。

就弄了俩选择,拍摄还是选择本地图片,实际上还是通过Intent来跳转到各自的界面,如何得到拍摄好/选择好的图片呢,就要用到activity中重要的一个方法,onActivityResult,如果在事先跳转的Intent对象上使用startActivityForResult方法就能在onActivityResult获取到信息了。

拍照,调用系统照相机: Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); //调用摄像机
Context.startActivityForResult(intent,TAKE_PHOTO);
选择本地图片:
Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);//调用android的图库
Context.startActivityForResult(intent, SELECT_PHOTO);

然后在获取图片的Activity中得到intent参数
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == TAKE_PHOTO){
Bundle bundle = data.getExtras();
Bitmap bitmap = (Bitmap) bundle.get("data");
}else if(requestCode ==SELECT_PHOTO{
Uri uri = data.getData();
String[] proj = { MediaStore.Images.Media.DATA };
Cursor cursor = this.managedQuery(uri, proj, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
String path = cursor.getString(column_index);
if (bitmap != null)// 如果不释放的话,不断取图片,将会内存不够
bitmap.recycle();
bitmap = BitmapFactory.decodeFile(path);
}
)
}
注意TAKE_PHOTO和SELECT_PHOTO是一个int值,是自己事先设置好的值,能区分开用户是选择了哪一个方法。两种方法根据返回的intent对象来获取bitmap的方式都不一样。
之后就是自由裁切,我们调用android系统中自带的裁切工具,这同样需要intent来跳转并且同样需要返回数据给activity:

Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
//开启裁剪功能
intent.putExtra("crop", "true");
//设定宽高的比例
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
//设定裁剪图片宽高
intent.putExtra("outputX", 100);
intent.putExtra("outputY", 100);
//要求返回数据
intent.putExtra("return-data", true);
Context.startActivityForResult(intent, CUT_PHOTO);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  bitmap android 图片