android项目中的拍照和本地图片截图

1,得到保存截图文件的地址

private static final String IMAGE_FILE_LOCATION = Environment.getExternalStorageDirectory()+"/temp.jpg";


private Uri imageUri;


imageUri = Uri.fromFile(new File(IMAGE_FILE_LOCATION));


 

2,相册和拍照按钮的点击事件

                // 相册
		imageViewLocalPhoto.setOnClickListener(new OnClickListener() {

			public void onClick(View v) {
				Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null);
				intent.setDataAndType(
						MediaStore.Images.Media.EXTERNAL_CONTENT_URI,//content://media/external/images/media
						IMAGE_UNSPECIFIED);
				startActivityForResult(intent, PHOTOZOOM);
			}
		});

		// 拍照
		imageViewTakePhoto.setOnClickListener(new OnClickListener() {

			public void onClick(View v) {
				Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
				intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(
						Environment.getExternalStorageDirectory(), "temp.jpg")));
				System.out.println("============="
						+ Environment.getExternalStorageDirectory());
				startActivityForResult(intent, PHOTOHRAPH);
			}
		});

3,在onActivityResult回调方法中

拍照和本地图片传入的uri不同

 // 拍照 显示图片页面
		if (requestCode == PHOTOHRAPH) {
			
			startPhotoZoom(imageUri);
		}

		// 读取相册缩放图片 显示图片页面
		if (requestCode == PHOTOZOOM) {
			
			startPhotoZoom(data.getData());
		}

4,截图方法

public void startPhotoZoom(Uri uri, int flag) {

			Intent intent = new Intent("com.android.camera.action.CROP");
			intent.setDataAndType(uri, "image/*");
			intent.putExtra("crop", "true");
			intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);//图像输出
			intent.putExtra("outputFormat",
					Bitmap.CompressFormat.JPEG.toString());
			intent.putExtra("noFaceDetection", true);
			intent.putExtra("return-data", false);//回调方法data.getExtras().getParcelable("data")返回数据为空
			startActivityForResult(intent, PHOTORESOULT);
		

}


5,回调方法返回截图结果

@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		
	    // 处理结果 处理缩放过后的图片
	    if (requestCode == PHOTORESOULT) {
                flag_layout = "layout2";
		Bundle extras = data.getExtras();
		if (extras != null) {
		    photo = extras.getParcelable("data");			
		}
            if(photo==null)//加载本地截图
            {
            	Bitmap bm = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory()+"/temp.jpg");
            	imageView.setImageBitmap(bm);
            }
            else//加载接收的图片数据
            {												
    	        imageView.setImageBitmap(photo);
            }

	  }

	  super.onActivityResult(requestCode, resultCode, data);
	}

 

传统的截图方法为:1,不加这句intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);//图像输出,,

                                    2,这句改为返回数据为true:intent.putExtra("return-data", true);

                                    3,也就没有剪切后的输出图片,通过data.getExtras().getParcelable("data")接收返回的图像数据

说明:经试验,传统的截图方法经常死机,报绑定数据过大的错误,所以改用本例的方法比较好用了,就是截好图片后,直接加载本地图片就好了

bug:如果删除temp.jpg文件后,拍照截图时会一直截删掉的temp.jpg文件,本地图片没问题,再换回拍照截图也没问题了


 


  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值