1

我正在開發一個使用android原生相機的應用程序。我可以成功地拍照並存儲並顯示在ImageView上。我正在測試HTC慾望Z,Nexus S和摩托羅拉Zoom。它適用於除Nexus S上的一個問題以外的所有三種設備。使用Nexus S拍攝照片時,預覽圖像已旋轉90度Android SDK Nexus S原生相機問題

您可以讓我知道如何解決這個問題嗎?

我的代碼:從Problems saving a photo to a file

非常感謝

請人

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.camera_preview); 
     imgTakenPhoto = (ImageView) findViewById(R.id.imageView); 
     getPhotoClick(); 
    } 
    private File getTempFile() 
    { 
     return new File(Environment.getExternalStorageDirectory(), "image.tmp"); 
    } 

    private void getPhotoClick() 
    { 
     Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
     intent.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(getTempFile())); 
     startActivityForResult(intent, REQUEST_FROM_CAMERA); 
    } 

    InputStream is=null; 

    @Override 
    protected void onActivityResult(int requestcode, int resultCode, Intent data){ 
     if (requestcode == REQUEST_FROM_CAMERA && resultCode == RESULT_OK) { 

      File file=getTempFile(); 

      try { 
       is=new FileInputStream(file); 

      } catch (FileNotFoundException e) { 
       e.printStackTrace(); 
      } 
      if(is==null){ 

       try { 
        Uri u = data.getData(); 
        is=getContentResolver().openInputStream(u); 
       } catch (FileNotFoundException e) { 
        e.printStackTrace(); 
       } 
      } 

      Bitmap thumbnail = BitmapFactory.decodeStream(is); 
      imgTakenPhoto.setImageBitmap(thumbnail); 

      } 
    } 

我已經採取了幫助?

回答

1

在某些電話上發生預覽時出現此問題。唯一的簡單的解決方法,我知道是設置風景模式中的onCreate():

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

另一個(可能是矯枉過正)可能是覆蓋在預覽表面的頂部另一面,創建自定義PreviewCallback和旋轉並繪製每一幀手動到這個表面,但是在性能和​​屏幕尺寸方面存在問題。

+0

如果您創建您自己的相機界面,這將起作用。如果您使用本機相機,則不起作用。我找到了一個解決方案。我會在稍後發佈。 乾杯 – Chinthaka

+0

@Chinthaka有沒有可以在這裏發佈的解決方案? – Swaroop

0

以下功能將檢測圖像的方向。

public static int getExifOrientation(String filepath) { 
     int degree = 0; 
     ExifInterface exif = null; 
     try { 
      exif = new ExifInterface(filepath); 
     } catch (IOException ex) { 
      Log.e(TAG, "cannot read exif", ex); 
     } 
     if (exif != null) { 
      int orientation = exif.getAttributeInt(
       ExifInterface.TAG_ORIENTATION, -1); 
      if (orientation != -1) {      
       switch(orientation) { 
        case ExifInterface.ORIENTATION_ROTATE_90: 
         degree = 90; 
         break; 
        case ExifInterface.ORIENTATION_ROTATE_180: 
         degree = 180; 
         break; 
        case ExifInterface.ORIENTATION_ROTATE_270: 
         degree = 270; 
         break; 
      } 
    } 
} 

在您的代碼上,使用此函數旋轉位圖圖像。的Util類可以https://android.googlesource.com/platform/packages/apps/Camera.git

if(degree != 0){ 
    bmp = Util.rotate(bmp, degree); 
} 

找到記住這隻會校正圖像的預覽的方向。 我希望這會幫助你。