やあ、
ユーザーがフォトギャラリーから写真を選択したり、カメラを使用して写真を撮ったりできるシンプルな Android アプリを作成しています。選択した写真を取得したら、その写真で何かをする別のアクティビティを開始します。ただし、別のアクティビティで写真を表示する際に問題があります。
写真を取得する最初のアクティビティは次のとおりです。
public class GetPhoto extends Activity implements OnClickListener {
ImageButton ibPhotoLib;
ImageButton ibCamera;
final static int FROM_CAMERA = 0, FROM_PHOTOLIB = 1;
public static Bitmap bmp;
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.ibCamera:
Intent cameraIntent = new Intent(
android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, FROM_CAMERA);
break;
case R.id.ibPhotoLib:
Intent photoPickerIntent = new Intent(Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(photoPickerIntent, FROM_PHOTOLIB);
break;
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
switch (requestCode) {
case FROM_CAMERA:
Bundle extras = data.getExtras();
bmp = (Bitmap)extras.get("data");
break;
case FROM_PHOTOLIB:
Uri chosenImageUri = data.getData();
try {
bmp = Media.getBitmap(this.getContentResolver(), chosenImageUri);
} catch (Exception e) {
e.printStackTrace();
}
break;
}
Intent intent = new Intent(GetPhoto.this, PhotoProcessing.class);
startActivity(intent);
}
}
}
次に、別のアクティビティ ( PhotoProcessing
) を開始します。このアクティビティでは、最初に写真を表示します。カメラを使用して写真を撮ると問題が発生します。ポートレートモードで表示されます。これが私が望むものです。ただし、ギャラリーから写真を選択すると、常に横向きに表示され、非常に面倒です。この問題を解決する方法を知っている人はいますか?
また、画像の幅と高さを取得しようとすると:
float imageWidth = GetPhoto.bmp.getWidth();
float imageHeight = GetPhoto.bmp.getHeight();
- 写真がカメラから撮影された場合、
imageWidth
=153
、imageHeight
=204
- 写真がギャラリーから選択された場合、
imageWidth
=3264
、imageHeight
=2448
同じ画像の場合。
なぜこれがそんなに違うのか、誰か説明できますか?私は非常に混乱しています。
解決策や提案をいただければ幸いです。ありがとう。