首页 > 代码库 > android项目中的拍照和本地图片截图

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文件,本地图片没问题,再换回拍照截图也没问题了


 


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