Android开发 照片(相册截取,拍照截取)截图

 1 //摄像头拍照
 2 public static File getImageFromCamer(Context context, File cameraFile,String imgname,
 3             int REQUE_CODE_CAMERA, Intent intent) {
 4         intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
 5         cameraFile = new File(Environment.getExternalStorageDirectory().getPath()+ "/"+ imgname);
 6         
 7         intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(cameraFile));
 8         ((Activity) context).startActivityForResult(intent, REQUE_CODE_CAMERA);
 9         return cameraFile;
10     }
//相册选取
    public static void getImageFromPhoto(Context context, int REQUE_CODE_PHOTO) {
        Intent intent = new Intent(Intent.ACTION_PICK, null);
        intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                "image/*");
        ((Activity) context).startActivityForResult(intent, REQUE_CODE_PHOTO);
  
    }
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		super.onActivityResult(requestCode, resultCode, data);
		if (resultCode != RESULT_CANCELED) {
			switch (requestCode) {
			case IMAGE_REQUEST_CODE:
				if (null != data) {// 为了取消选取不报空指针用的
					uri = data.getData();
					BitmapUtils.startPhotoZoom(
							activity_group_topic_publish.this, uri,
							CROP_REQUEST_CODE);
				}
				break;
			case CAMERA_REQUEST_CODE:
				uri = Uri.fromFile(cameFile);
				BitmapUtils.startPhotoZoom(activity_group_topic_publish.this,
						uri, CROP_REQUEST_CODE);
				break;
			case CROP_REQUEST_CODE:
				if (uri == null) {
					break;
				}
				cropBitmap = BitmapUtils.getBitmapFromUri(uri,
						activity_group_topic_publish.this);
				if (cropBitmap != null) {
					imgphotoview.setImageBitmap(cropBitmap);
					imgphotoview.setVisibility(View.VISIBLE);
					ByteArrayOutputStream baos = new ByteArrayOutputStream();
					cropBitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
					mContent = baos.toByteArray();
				}
				break;
			}
		}
		super.onActivityResult(requestCode, resultCode, data);
	}

 

 1 public static void startPhotoZoom(Context context, Uri uri,
 2             int REQUE_CODE_CROP) {
 3         int dp = 500;
 4   
 5         Intent intent = new Intent("com.android.camera.action.CROP");
        //android4.0的兼容
6 if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) { 7 String url = BitmapUtils.getPath(context, 8 uri); 9 File file = new File(url); 10 Uri mUri = Uri.fromFile(file); 11 intent.setDataAndType(mUri, "image/*"); 12 } else { 13 intent.setDataAndType(uri, "image/*"); 14 } 15 // 下面这个crop=true是设置在开启的Intent中设置显示的VIEW可裁剪 16 intent.putExtra("crop", "true"); 17 intent.putExtra("scale", true);// 去黑边 18 intent.putExtra("scaleUpIfNeeded", true);// 去黑边 19 // aspectX aspectY 是宽高的比例 20 intent.putExtra("aspectX", 1);//输出是X方向的比例 21 intent.putExtra("aspectY", 1); 22 // outputX outputY 是裁剪图片宽高,切忌不要再改动下列数字,会卡死 23 intent.putExtra("outputX", dp);//输出X方向的像素 24 intent.putExtra("outputY", dp); 25 intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString()); 26 intent.putExtra("noFaceDetection", true); 27 intent.putExtra(MediaStore.EXTRA_OUTPUT, uri); 28 intent.putExtra("return-data", false);//设置为不返回数据 29 30 ((Activity) context).startActivityForResult(intent, REQUE_CODE_CROP); 31 }
 1 //从uri中获取照片
 2 public static Bitmap getBitmapFromUri(Uri uri, Context mContext) {
 3         try {
 4             // 读取uri所在的图片
 5             Bitmap bitmap = MediaStore.Images.Media.getBitmap(
 6                     mContext.getContentResolver(), uri);
 7             return bitmap;
 8         } catch (Exception e) {
 9             e.printStackTrace();
10             return null;
11         }
12     }

 

 1 @SuppressLint("NewApi")
 2     public static String getPath(final Context context, final Uri uri) {
 3 
 4         final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;
 5 
 6         // DocumentProvider
 7         if (isKitKat && DocumentsContract.isDocumentUri(context, uri)) {
 8             // ExternalStorageProvider
 9             if (isExternalStorageDocument(uri)) {
10                 final String docId = DocumentsContract.getDocumentId(uri);
11                 final String[] split = docId.split(":");
12                 final String type = split[0];
13 
14                 if ("primary".equalsIgnoreCase(type)) {
15                     return Environment.getExternalStorageDirectory() + "/"
16                             + split[1];
17                 }
18 
19             }
20             // DownloadsProvider
21             else if (isDownloadsDocument(uri)) {
22                 final String id = DocumentsContract.getDocumentId(uri);
23                 final Uri contentUri = ContentUris.withAppendedId(
24                         Uri.parse("content://downloads/public_downloads"),
25                         Long.valueOf(id));
26 
27                 return getDataColumn(context, contentUri, null, null);
28             }
29             // MediaProvider
30             else if (isMediaDocument(uri)) {
31                 final String docId = DocumentsContract.getDocumentId(uri);
32                 final String[] split = docId.split(":");
33                 final String type = split[0];
34 
35                 Uri contentUri = null;
36                 if ("image".equals(type)) {
37                     contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
38                 } else if ("video".equals(type)) {
39                     contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
40                 } else if ("audio".equals(type)) {
41                     contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
42                 }
43 
44                 final String selection = "_id=?";
45                 final String[] selectionArgs = new String[] { split[1] };
46 
47                 return getDataColumn(context, contentUri, selection,
48                         selectionArgs);
49             }
50         }
51         // MediaStore (and general)
52         else if ("content".equalsIgnoreCase(uri.getScheme())) {
53             // Return the remote address
54             if (isGooglePhotosUri(uri))
55                 return uri.getLastPathSegment();
56 
57             return getDataColumn(context, uri, null, null);
58         }
59         // File
60         else if ("file".equalsIgnoreCase(uri.getScheme())) {
61             return uri.getPath();
62         }
63 
64         return null;
65     }

 以上代码,在小米手机上会出现重大bug,拍照时会

github上有一个开源的图片选取项目, 地址是:https://github.com/ryanhoo/PhotoCropper

转载于:https://www.cnblogs.com/sunny00527/p/5261740.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值