1

やあ、

ユーザーがフォトギャラリーから写真を選択したり、カメラを使用して写真を撮ったりできるシンプルな 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= 153imageHeight=204
  • 写真がギャラリーから選択された場合、imageWidth= 3264imageHeight=2448

同じ画像の場合。

なぜこれがそんなに違うのか、誰か説明できますか?私は非常に混乱しています。

解決策や提案をいただければ幸いです。ありがとう。

4

1 に答える 1

1

カメラ インテントから返されるビットマップはサムネイルです。さらに悪いことに、一部のメーカーのカメラの実装では何も返されないと思います。

カメラ インテントにファイルを渡してから、onActivityResult メソッドでファイルから画像データをフェッチする必要があります。

実装の詳細については、写真を簡単に撮るガイドをご覧ください。

于 2013-02-26T00:46:57.227 に答える