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メソッドで設定したり変更したりすることもできます.
コードを貼り付けます.
以上の方法で画像の角度を得ることができると、Matrixクラスで画像を修正することができますか、それとも完全なコードを貼ることができますか.以下のようにします.
以上の2つのステップで、正着の画像が得られます.もちろん、途中で一歩省略しました.
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);