2013-02-26 51 views
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 = 3264,imageHeight = 2448

爲同一圖像。

任何人都可以解釋爲什麼這是如此不同?我很困擾。

任何解決方案或建議將不勝感激。謝謝。

回答

1

從相機意圖傳回的位圖是縮略圖。更糟糕的是,我認爲一些製造商的相機實現不會返回任何東西。

您需要爲相機指定一個文件,然後從onActivityResult方法中的文件中獲取圖像數據。

查看Taking Photos Simply指南瞭解實施細節。