5
写真の回転にexifInterfaceを使用しています。以下のコードが問題点です。Androidの携帯電話でカメラキャプチャした画像の向きの問題
Bitmap b = BitmapFactory.decodeFile(imagePath);
- が適切なレベルにそれをスケーリングして、ビットマップのサイズを変更したファイルからビットマップを作成
int width = b.getWidth();
int height = b.getHeight();
int newWidth = 150;
int newHeight = 150;
float scaleWidth = ((float) newWidth)/width;
float scaleHeight = ((float) newHeight)/height;
Matrix matrix = new Matrix();
matrix.postScale(scaleWidth, scaleHeight);
// Bitmap resizedBitmap = Bitmap.createBitmap(b, 0, 0, width, height, matrix, true);
// resizedBitmap.compress(Bitmap.CompressFormat.JPEG, 70, out);
- 画像のハンドルの向き
ExifInterface exif = new ExifInterface(imagePath);
String orientation = exif.getAttribute(ExifInterface.TAG_ORIENTATION);
if (orientation.equals(ExifInterface.ORIENTATION_NORMAL)) {
// Do nothing. The original image is fine.
} else if (orientation.equals(ExifInterface.ORIENTATION_ROTATE_90+"")) {
matrix.postRotate(90);
} else if (orientation.equals(ExifInterface.ORIENTATION_ROTATE_180+"")) {
matrix.postRotate(180);
} else if (orientation.equals(ExifInterface.ORIENTATION_ROTATE_270+"")) {
matrix.postRotate(270);
}
- 保存新しいビットマップ
out = new FileOutputStream(new File("some output file path"));
Bitmap resizedBitmap = Bitmap.createBitmap(b, 0, 0, width, height, matrix, true);
resizedBitmap.compress(Bitmap.CompressFormat.JPEG, 70, out);
このコードは解決回転の問題のために働いていない、私に指針を与えてください。 Lgデバイスでは、exifinterfaceは常に0の方向を返し、Samsungデバイスは6と1を返します。
htc、Motorola、samsung、Sony、LGなどのすべてのデバイスでこの問題を解決する方法。
私はあなたにすべて感謝しています。
HTCでもテストしましたか? – user991429
はい、HTCエクスプローラでアプリをテストしても、LG Optimus Blackとして正常に動作します。 @ user991429 – MKJParekh
@MKJParekh:素晴らしい仕事、ありがとう:) – Aerrow