Intent拍照,从相册中选取

本文深入探讨了Android平台上的拍照功能实现,包括通过Intent调用相机应用进行拍照,从相册选择图片,以及如何使用裁剪功能对图片进行处理。重点介绍了权限申请、文件路径操作、以及使用Crop Intent进行图片裁剪的详细步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Intent拍照

<span style="font-size:18px;">String photoPath = "";
public void doTakePhoto() {
	Intent intent = new Intent(			android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
	File parent = FileUitlity.getInstance(this).makeDir("jredu_head");
	// 路径
	photoPath = parent.getPath() + File.separator
				+ System.currentTimeMillis() + ".png";
	intent.putExtra(MediaStore.EXTRA_OUTPUT,
				Uri.fromFile(new File(photoPath)));
	startActivityForResult(intent, TAKE_FROM_CAPTURE);
}</span>

从相册中选取

<span style="font-size:18px;color:#333333;">public void doPhonePhoto() {
	Intent intent = new Intent(Intent.ACTION_PICK);
	intent.setData(MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
	startActivityForResult(intent, TAKE_FROM_ALBULE);
	}</span>

裁剪方法:

public void startPhotoZoom(Uri uri) {
	Intent intent = new Intent("com.android.camera.action.CROP");
	intent.setDataAndType(uri, "image/*");
	// 设置裁剪
	intent.putExtra("crop", "true");
	// aspectX aspectY 是宽高的比例
	intent.putExtra("aspectX", 1);
	intent.putExtra("aspectY", 1);
	// outputX outputY 是裁剪图片宽高
	intent.putExtra("outputX", 150);
	intent.putExtra("outputY", 150);
	intent.putExtra("return-data", true);
	startActivityForResult(intent, RESULT_PHOTO);
}

重写onActivityResult()方法

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {	
	super.onActivityResult(requestCode, resultCode, data);
	if (resultCode != RESULT_OK) {
		return;
	}
	switch (requestCode) {
	case TAKE_FROM_CAPTURE:
			//裁剪
		startPhotoZoom(Uri.fromFile(new File(photoPath)));
		break;
	case TAKE_FROM_ALBULE:
	Cursor cursor = this.getContentResolver().query(data.getData(),new String[] { MediaStore.Images.Media.DATA }, null, null,
					null);
		cursor.moveToFirst();
		photoPath = cursor.getString(cursor
					.getColumnIndex(MediaStore.Images.Media.DATA));
		cursor.close();
		//裁剪
		startPhotoZoom(Uri.fromFile(new File(photoPath)));
//			image.setImageURI(Uri.fromFile(new File(photoPath)));
		break;
	case RESULT_PHOTO:
		Bundle bundle=data.getExtras();
		if(bundle!=null){
			Bitmap b=bundle.getParcelable("data");
			image.setImageBitmap(b);//展示
		}
		break;
	}
}

拍照需要权限

<uses-permission android:name="android.permission.CAMERA"/>
	<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值