首页 > 代码库 > 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项目中的拍照和本地图片截图
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。