カメラで撮影した画像の向きの取得方法を教えてください。

770 views
Skip to first unread message

kz.tmmr

unread,
Aug 2, 2014, 8:18:05 AM8/2/14
to 日本アンドロイドの会
お世話になっております。

自作アプリからカメラアプリを起動して、その撮影画像を自作アプリ上で表示させたいと思っています。

単純に撮影画像のBitmapを表示させるだけだと、撮影時の端末の向きによっては撮影画像が90度傾いて表示されてしまうので、

撮影画像の向きを取得して、それに応じてBitmapを回転させたうえで表示~という形を考えています。

色々参考にして、下のようにして撮影画像の向き取得を試してみたのですが、

どのような端末向きで撮影しても、何故か常に0が表示されてきてしまいます。

↓↓↓↓↓

public class MainActivity extends Activity {

// カメラ撮影画像の格納先URI
private Uri cameraImageUri;

// カメラアプリ連携
private void startCameraActivity() {
cameraImageUri = makeCameraImageUri();
Intent intent = new Intent();
intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.putExtra(MediaStore.EXTRA_OUTPUT, cameraImageUri);
startActivityForResult(intent, 123);
}

@Override
protected void onActivityResult(int requestCode, int resultCode,
Intent intent) {
if(requestCode == 123) {
if(resultCode == RESULT_OK) {
// カメラ撮影画像の取得
Bitmap bitmap =
MediaStore.Images.Media.getBitmap(getContentResolver(),
cameraImageUri);
// カメラ撮影画像の向きの取得①
Cursor cur = MediaStore.Images.Media.query(
getContentResolver(),
cameraImageUri,
new String[]{ MediaStore.Images.Media.ORIENTATION }, null, null);
if(cur != null && cur.moveToFirst()) {
Log.i(TAG, "degrees1 = " +
cur.getFloat(cur.getColumnIndex(MediaStore.Images.Media.ORIENTATION)));
← 0が表示されます
}
// カメラ撮影画像の向きの取得②
ExifInterface exif = new ExifInterface(cameraImageUri.getPath());
Log.i(TAG, "degrees2 = " +
exif.getAttribute(ExifInterface.TAG_ORIENTATION)); ← 0が表示されます
}
}
}



}

↑↑↑↑↑

(QuickPicなど)有名な画像ビューアとかで、↑で撮影した画像を見ると、

画像が正しい向きで表示されることはもちろん、

詳細情報とかで画像の角度が表示されてきているので、

自作アプリのカメラ撮影の仕組み自体は問題なく、

何かしら画像の向きの取得方法があるんだろうなー、とは思っているのですが、

そこに至っておりません。。。。

恐れ入りますが、ご教授いただけると助かります。mm

Hirokazu Fukami

unread,
Aug 2, 2014, 8:47:49 AM8/2/14
to android-g...@googlegroups.com
こんにちはfkmです。

cameraImageUriで結果を取得しているので、
それを用いて、ContentProviderから角度を取得しましょう。

参考URL
http://yusukezzz.net/blog/archives/1984

ちなみに、cameraImageUriはActivityのフィールドになっているので、
onSaveInstanceState()でちゃんとbundleにいれて、
onRestoreInstanceState()で復元するようにしないと、一部の機種でほぼ100%誤動作します。
> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> このグループから退会し、グループからのメールの配信を停止するには android-group-j...@googlegroups.com にメールを送信してください。
> このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> http://groups.google.com/group/android-group-japan からこのグループにアクセスしてください。
> その他のオプションについては、https://groups.google.com/d/optout にアクセスしてください。



--
-------------------------------------------------------------
深見 浩和(Hirokazu Fukami)

URI:http://www.fkmsoft.jp
email: f...@fkmsoft.jp

kz.tmmr

unread,
Aug 5, 2014, 8:06:17 AM8/5/14
to 日本アンドロイドの会
fkm さま

回答ありがとうございます。

参考URLを確認しましたが、
前回提示したコードの「// カメラ撮影画像の向きの取得①」の部分との違いがよく分かりませんでした。。。

念の為、URIの指定部分だけ自作アプリの cameraImageUri に差し替えて試してみましたが、取れる角度はやはり 0 でした。

私の理解が足りていないだけでしょうか。。。。

恐れ入りますが、あらためて詳細等をご教授いただけると助かります。mm
Reply all
Reply to author
Forward
0 new messages