获取SDCard下的图片,纠正其方向

/** 
     * 读取图片属性:旋转的角度 
     * @param path 图片绝对路径 
     * @return degree旋转的角度 
     */  
       public static int readPictureDegree(String path) {  
           int degree  = 0;  
           try {  
                   ExifInterface exifInterface = new ExifInterface(path);  
                   int orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);  
                   switch (orientation) {  
                   case ExifInterface.ORIENTATION_ROTATE_90:  
                           degree = 90;  
                           break;  
                   case ExifInterface.ORIENTATION_ROTATE_180:  
                           degree = 180;  
                           break;  
                   case ExifInterface.ORIENTATION_ROTATE_270:  
                           degree = 270;  
                           break;  
                   }  
           } catch (IOException e) {  
                   e.printStackTrace();  
           }  
           return degree;  
       }
public static Bitmap correctBitmapDegree(String picPath, Bitmap bitmap) {
		/** 
		 * 获取图片的旋转角度,有些系统把拍照的图片旋转了,有的没有旋转 
		 */  
		int degree = readPictureDegree(picPath);
		/** 
		 * 把图片旋转为正的方向 
		 */  
		bitmap = rotaingImageView(degree, bitmap);
		return bitmap;
	}
 /** 
    * 旋转图片 
    * @param angle 
    * @param bitmap 
    * @return Bitmap 
    */  
   public static Bitmap rotaingImageView(int angle , Bitmap bitmap) {  
       //旋转图片 动作  
       Matrix matrix = new Matrix();;  
       matrix.postRotate(angle);  
       // 创建新的图片  
       Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, false);  
       return resizedBitmap;  
   }

	public static Bitmap getBitmap(Context context,Intent data) {
		// 获取屏幕的宽高
		DisplayMetrics metrics = new DisplayMetrics();
		((Activity) context).getWindowManager().getDefaultDisplay().getMetrics(metrics);

		int screenWidth = metrics.widthPixels;
		int screenHeight = metrics.heightPixels;

		try {
			// 获取相册返回的结果,并显示在屏幕上
			Bitmap getBitmap = BitmapFactory.decodeStream(context.getContentResolver().openInputStream(data.getData()));
			int bitmapWidth = getBitmap.getWidth();
			int bitmapHeight = getBitmap.getHeight();

			int widthScale = bitmapWidth / screenWidth;
			int heightScale = bitmapHeight / screenHeight;
			// 处理图片,防止OOM
			BitmapFactory.Options opts = new Options();
			if (widthScale > 1 || heightScale > 1) {
				opts.inSampleSize = widthScale > heightScale ? widthScale: heightScale;
			}
			System.out.println(opts.inSampleSize + "");
			Bitmap bitmap = BitmapFactory.decodeStream(context.getContentResolver().openInputStream(data.getData()),
					null, opts);
			return bitmap;
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		}
	}



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值