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。相冊和拍照button的点击事件


// 相冊 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,截图方法

【android项目中的拍照和本地图片截图】
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文件。本地图片没问题,再换回拍照截图也没问题了

 









    推荐阅读