选择手机中的一张照片或拍照上传图片(超高清晰度)

本文介绍了如何在Android应用中选择或拍摄照片,并保持超高清晰度。通过定义常量、处理onActivityResult回调,确保图片质量。文章详细讲解了切图过程,强调切图后需保存为临时文件并重新绘制Bitmap,以避免质量损失。

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

本文借鉴了多位前辈的代码,在自己的项目使用中根据需求做了一些修改,为了以后再次使用类似功能的时候方便一些,特把主要的代码流程部分贴出来


首先在activity中定义几个常量

private static final String IMAGE_UNSPECIFIED = "image/*";
	private static final int TAKE_PICTURE = 0;//拍照
	private static final int CHOOSE_PICTURE = 1;//手机内单选
	private static final int MULTIPLE_CHOICE = 2;//手机内多选

	private static final int SCALE = 5;// 照片缩小比例
	//临时图片的位置,主要是为了得到tempUri
	File tempFile = new File(Environment.getExternalStorageDirectory(), "temp.jpg");
	Uri tempUri = Uri.fromFile(tempFile);

然后在你需要添加图片的操作里面加入如下选项


switch (position) {
							case TAKE_PICTURE://拍照
								Intent openCameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
								Uri imageUri = Uri
										.fromFile(new File(Environment.getExternalStorageDirectory(), "temp.jpg"));
								// 指定照片保存路径(SD卡),image.jpg为一个临时文件,每次拍照后这个图片都会被替换
								openCameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
								startActivityForResult(openCameraIntent, TAKE_PICTURE);
								break;

							case CHOOSE_PICTURE://单选
								Intent openAlbumIntent = new Intent(Intent.ACTION_GET_CONTENT);
								openAlbumIntent.setType("image/*");
								startActivityForResult(openAlbumIntent, CHOOSE_PICTURE);
								break;
							case MULTIPLE_CHOICE:// 多选
								Intent intent = new Intent(AddGoodsActivity.this, PhotoWallActivity.class);
								intent.putExtra("size", 8 - dgv_add_goods_imgs2.getChildCount());
								startActivityForResult(intent, MULTIPLE_CHOICE);
								break;
							default:
								break;
							}


多选的操作需要跳一个自定义的activity,不在本文讨论,因为是直接使用的http://blog.youkuaiyun.com/books1958/article/details/41010077中的例子,只是稍作修改,想看多选操作的请移步


拍照会调用相机拍照后在内存卡根目录存一张临时图片,单选会选择一张图片后返回图片路径,这两个都是取的文件路径,而不是bitmap,因为要保证清晰度,最好是自己去重绘bitmap,特别是你需要切图的,切完之后不能直接返回bitmap,而是将切完之后的图保存成临时文件,然后重绘


拍完选完之后会自动调用当前activity的onActivityResult,在onActivityResult处理返回的图片


@Overr
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值