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= 153, imageHeight=204
  • 如果照片是从图库中选择的,imageWidth= 3264, imageHeight=2448

对于相同的图像。

谁能解释为什么这如此不同?我很困扰。

任何解决方案或建议将不胜感激。谢谢。

4

1 回答 1

1

从相机意图传回的位图是缩略图。更糟糕的是,我认为一些制造商的相机实现不会返回任何东西。

您需要为相机意图提供一个文件,然后在 onActivityResult 方法中从该文件中获取图像数据。

查看简单拍照指南了解实施细节。

于 2013-02-26T00:46:57.227 回答