2013-10-25 2 views
0

Я ищу довольно долгое время, чтобы получить решение об использовании камеры, чтобы повернуть изображение перед сохранением в SD-карте. я пытаюсь захватить фотографию в портрете и перейти к файлу SD-карты, чтобы посмотреть его как пейзаж. Кто-нибудь понял, как это решить? Мой Кодекс до сих пор: -Цель камеры повернуть изображение перед сохранением в SD-карте

Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
    startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST); 

    @Override 

    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (resultCode == Activity.RESULT_OK) { 
     if (requestCode == REQUEST_CAMERA) { 


    Cursor cursor = getContentResolver().query(Media.EXTERNAL_CONTENT_URI, new String[]{Media.DATA, Media.DATE_ADDED, MediaStore.Images.ImageColumns.ORIENTATION}, Media.DATE_ADDED, null, "date_added ASC"); 
       if(cursor != null && cursor.moveToFirst()) 
       { 
        do { 
         uri = Uri.parse(cursor.getString(cursor.getColumnIndex(Media.DATA))); 

        photoPath = uri.toString(); 

Matrix matrix = new Matrix(); 

     ExifInterface exifReader = null; 
     try { 
      exifReader = new ExifInterface(photoPath); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     }// Location of your image 

     int orientation = exifReader.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL); 

     if (orientation ==ExifInterface.ORIENTATION_NORMAL) { 

     // Do nothing. The original image is fine. 
     } else if (orientation == ExifInterface.ORIENTATION_ROTATE_90) { 

       matrix.postRotate(90); 

     } else if (orientation == ExifInterface.ORIENTATION_ROTATE_180) { 

       matrix.postRotate(180); 

     } else if (orientation == ExifInterface.ORIENTATION_ROTATE_270) { 

       matrix.postRotate(270); 

     } 
       }while(cursor.moveToNext()); 
       cursor.close(); 
      }  
} 
+0

передать этот ответ http://stackoverflow.com/questions/14066038/why-image-captured-using-camera-intent-gets-rotated- on-some-devices-in-android – Shruti

+0

см. этот ответ тоже http://stackoverflow.com/questions/6069122/camera-orientation-problem-in-android – Shruti

+0

Я новичок в android. Могу ли я узнать, как слиться с моим кодом? на onActivityResult? – micky

ответ

1

Используйте следующий код, чтобы повернуть изображение:

Uri imageUri = intent.getData(); 
      String[] orientationColumn = {MediaStore.Images.Media.ORIENTATION}; 
      Cursor cur = managedQuery(imageUri, orientationColumn, null, null, null); 
      int orientation = -1; 
      if (cur != null && cur.moveToFirst()) { 
       orientation = cur.getInt(cur.getColumnIndex(orientationColumn[0])); 
      } 
      Matrix matrix = new Matrix(); 
      matrix.postRotate(orientation); 
+0

этот код, куда я должен обратиться? внутри onActivityResult? – micky

+0

Я помещаю этот код внутри своего onActivityResult. Все тот же результат. – micky

+0

обновленный код обновленной версии:) – micky

-1

Привет, посмотрите нижеприведенный код. перед сохранением захваченного изображения выполните следующий процесс. он сохранит изображения в портретном режиме. Надеюсь, что это поможет вам.

int rotation = -1; 
rotation = ((WindowManager)getSystemService(Context.WINDOW_SERVICE)) 
       .getDefaultDisplay().getOrientation(); 



    Matrix rotator = new Matrix(); 
    switch (rotation) { 
    case (Surface.ROTATION_0): 
     break; 
    case (Surface.ROTATION_90): 
     rotator.postRotate(270); 
     break; 
    case (Surface.ROTATION_180): 
     rotator.postRotate(180); 
     break; 
    case (Surface.ROTATION_270): 
     rotator.postRotate(90); 
     break; 


    // screen_{width,height} are applied before the rotate, so we don't 
    // need to change them based on rotation. 
    bmp_ss = Bitmap.createBitmap(bmp_ss, 0, 0, screen_width, screen_height, rotator, false); 
1

Недавно я столкнулся с аналогичной проблемой, и мне потребовалось некоторое время, чтобы понять это. Это может быть не очень хорошее решение, но это сработало для меня довольно хорошо.

Посмотрите на следующий код. Надеюсь, что это помогает:

Camera Snippet

Этот фрагмент также содержит автофокусировка включение/отключение, звука затвора и т.д. Наслаждайтесь !!

+0

спасибо, что поделились этим. между u получил какой-либо образец с намерением вызова ACTION_IMAGE_CAPTURE? – micky

+0

nope .. но вы можете найти много таких примеров/учебников для этого. Вот один из developer.android.com: http://developer.android.com/training/camera/photobasics.html и http://developer.android.com/guide/topics/media/camera.html# intent-receive –

+0

Я имею в виду пример намерения вызова ACTION_IMAGE_CAPTURE с правильной настройкой перед сохранением в SD-карте. – micky

Смежные вопросы