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

本文介绍了一种用于处理图片旋转角度的方法,包括读取图片的旋转角度、修正图片方向及旋转图片等功能。通过ExifInterface获取图片元数据,实现对图片角度的自动校正。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/** 
     * 读取图片属性:旋转的角度 
     * @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;
		}
	}



内容概要:本文介绍了奕斯伟科技集团基于RISC-V架构开发的EAM2011芯片及其应用研究。EAM2011是一款高性能实时控制芯片,支持160MHz主频和AI算法,符合汽车电子AEC-Q100 Grade 2和ASIL-B安全标准。文章详细描述了芯片的关键特性、配套软件开发套件(SDK)和集成开发环境(IDE),以及基于该芯片的ESWINEBP3901开发板的硬件资源和接口配置。文中提供了详细的代码示例,涵盖时钟配置、GPIO控制、ADC采样、CAN通信、PWM输出及RTOS任务创建等功能实现。此外,还介绍了硬件申领流程、技术资料获取渠道及开发建议,帮助开发者高效启动基于EAM2011芯片的开发工作。 适合人群:具备嵌入式系统开发经验的研发人员,特别是对RISC-V架构感兴趣的工程师和技术爱好者。 使用场景及目标:①了解EAM2011芯片的特性和应用场景,如智能汽车、智能家居和工业控制;②掌握基于EAM2011芯片的开发板和芯片的硬件资源和接口配置;③学习如何实现基本的外设驱动,如GPIO、ADC、CAN、PWM等;④通过RTOS任务创建示例,理解多任务处理和实时系统的实现。 其他说明:开发者可以根据实际需求扩展这些基础功能。建议优先掌握《EAM2011参考手册》中的关键外设寄存器配置方法,这对底层驱动开发至关重要。同时,注意硬件申领的时效性和替代方案,确保开发工作的顺利进行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值