获取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;
		}
	}



内容概要:本文针对国内加密货币市场预测研究较少的现状,采用BP神经网络构建了CCi30指数预测模型。研究选取2018年3月1日至2019年3月26日共391天的数据作为样本,通过“试凑法”确定最优隐结点数目,建立三层BP神经网络模型对CCi30指数收盘价进行预测。论文详细介绍了数据预处理、模型构建、训练及评估过程,包括数据归一化、特征工程、模型架构设计(如输入层、隐藏层、输出层)、模型编译与训练、模型评估(如RMSE、MAE计算)以及结果可视化。研究表明,该模型在短期内能较准确地预测指数变化趋势。此外,文章还讨论了隐层节点数的优化方法及其对预测性能的影响,并提出了若干改进建议,如引入更多技术指标、优化模型架构、尝试其他时序模型等。 适合人群:对加密货币市场预测感兴趣的研究人员、投资者及具备一定编程基础的数据分析师。 使用场景及目标:①为加密货币市场投资者提供一种新的预测工具和方法;②帮助研究人员理解BP神经网络在时间序列预测中的应用;③为后续研究提供改进方向,如数据增强、模型优化、特征工程等。 其他说明:尽管该模型在短期内表现出良好的预测性能,但仍存在一定局限性,如样本量较小、未考虑外部因素影响等。因此,在实际应用中需谨慎对待模型预测结果,并结合其他分析工具共同决策。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值