Androidは角度によって画像を回転させます



Androidの開発過程では、ほとんどのアプリケーションが画像の処理に多かれ少なかれ関与しています.よく遭遇する1つのケースは、取得した画像は横になっていて、実際に必要な画像は正になっていて、つまり縦になっています.ここでは、画像の横堅状況の判断、すなわち、画像の現在の角度について述べる.そして角度によって修正して、欲しい画像を手に入れます.
Androidのソースコードには、画像情報を読み書きするクラスExifInterfaceが提供されています.公式には、This a class for reading and writing Exif tags in a JPEG fileと注釈されています.ExifInterfaceは、JPEG画像ファイルExif情報を読み書きするためのクラスであることがわかります.
Exif情報には角度,GPS経緯度,ホワイトバランス,フラッシュなどの情報が含まれている.ExifInterfaceの使い方は比較的簡単で、1つのパラメータ付きの構造方法しかなく、画像ファイルのアドレスを転送すればいいです.クラスにはgetAttributeメソッドが用意されており、既存のピクチャの本来のプロパティをsetAttributeメソッドで設定したり変更したりすることもできます.
コードを貼り付けます.
	/**
	 *       :     
	 * @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;
		}
		return degree;
	}

以上の方法で画像の角度を得ることができると、Matrixクラスで画像を修正することができますか、それとも完全なコードを貼ることができますか.以下のようにします.
	/**
	 *     ,          。
	 * @param bitmap     
	 * @param degrees        
	 * @return Bitmap       
	 */
	public static Bitmap rotateBitmap(Bitmap bitmap, int degrees) {
		if (degrees == 0 || null == bitmap) {
			return bitmap;
		}
		Matrix matrix = new Matrix();
		matrix.setRotate(degrees, bitmap.getWidth() / 2, bitmap.getHeight() / 2);
		Bitmap bmp = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
		if (null != bitmap) {
			bitmap.recycle();
		}
		return bmp;
	}

以上の2つのステップで、正着の画像が得られます.もちろん、途中で一歩省略しました.
      
   Bitmap bmp =BitmapFactory.decodeFile(imageFilePath);