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

这篇博客介绍了在Android项目中添加图片的两种方法,包括通过拍摄和选择本地图片。作者强调使用`onActivityResult`方法来处理拍摄或选择图片后的结果,并详细说明如何调用系统相机以及利用Android内置裁切工具进行图片自由裁切。

好久没有更新博客了,这几天又要弄一个类似名片的项目,有一个可以自己选择添加照片的功能。

就弄了俩选择,拍摄还是选择本地图片,实际上还是通过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);





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值