2014-11-02 2 views
0

Я пытаюсь показать изображение пользователя с камеры с правой стороны вверх - не важно, как он держит телефон.Изображение с камеры android с правой стороны вверх

Мой код прост:

Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
cameraIntent.putExtra("return-data", true);     
startActivityForResult(cameraIntent, CAMERA_RESULT); 

Затем я придаю вернулся изображение в ImageView в onActivityResult.

Я знаю, как вращать изображение, но как я могу узнать, как пользователь держит камеру, когда он сделал снимок?

ответ

1

Я почти уверен, что вы не можете этого сделать, используя дополнительные данные «return-data». Вам нужно будет передать имя файла, где вы хотите создать изображение, а затем использовать Exif файла для проверки ориентации.

String FOLDER = "YOUR_FOLDER"; 
String FILENAME = "YOUR_FILENAME"; 
int TAKE_PHOTO_REQUEST_CODE = 0; 
File photoFile; 

void TakePhoto() 
{ 
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 

    photoFile = new File(FOLDER , FILENAME); 
    Uri pictureFileUri = Uri.fromFile(photoFile); 
    takePictureIntent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, pictureFileUri); 
    startActivityForResult(takePictureIntent, TAKE_PHOTO_REQUEST_CODE); 

} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{ 
    super.onActivityResult(requestCode, resultCode, data); 

    switch(requestCode) { 
    case TAKE_PHOTO_REQUEST_CODE: 
     if(resultCode == RESULT_OK) 
     { 
      int orientation = 0; 
      try 
      { 
       ExifInterface exif = new ExifInterface(path); 
       int exifOrientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, -1); 
       switch (exifOrientation) 
       { 
       case ExifInterface.ORIENTATION_NORMAL: 
        orientation = 0; 
        break; 
       case ExifInterface.ORIENTATION_ROTATE_90: 
        orientation = 90; 
        break; 
       case ExifInterface.ORIENTATION_ROTATE_180: 
        orientation = 180; 
        break; 
       case ExifInterface.ORIENTATION_ROTATE_270: 
        orientation = -90; 
        break; 
       } 
      } 
      catch (IOException e) 
      { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 

     // Here you can rotate the bitmap knowing the orientation of the camera when the photo was taken 
    } 
} 
+0

Thanks, man. Это именно то, что мне нужно. – Dazhush

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