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