2013-09-27 2 views
1

Я внедрил пользовательскую камеру, из которой сделаю снимок, сохраните его, вставьте в магазин носителей и сразу же отобразите его. Меня беспокоила проблема с сохраненным изображением Я попытался исправить это, используя ExifInterface, используя filePath напрямую или используя ориентацию от поставщика контента изображений Android.Изображение повернуто при съемке в портретном режиме

ориентация всегда возвращается как 0.I уже использовали:

Android image selected from gallery Orientation is always 0 : Exif TAG

private int getExifOrientation(String pathName) 
{ 
    //for complete info on EXIF orientation visit: http://sylvana.net/jpegcrop/exif_orientation.html 
    ExifInterface exif=null; 
    try { 
     exif = new ExifInterface(pathName); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     Log.e("ImagePreviewActivity", "Exif data of the image could not be retreived"); 
    } 
    int orientation=exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, -1); 
    return orientation; 
} 

private int getRotation(int orientation) 
{ 
    int rotation=0; 
    switch(orientation) 
    { 
     case ExifInterface.ORIENTATION_ROTATE_90: 
      //orientation values is 6 
      rotation=90; 
      break; 

     case ExifInterface.ORIENTATION_ROTATE_180: 
      //orientation value is 3 
      rotation=180; 
      break; 

     case ExifInterface.ORIENTATION_ROTATE_270: 
      //orientation value is 8 
      rotation=270; 
      break; 

     case -1: 
      Log.d("ImagePreviewActivity","Error getting orientation from Exif data."); 
      break; 

     case 1: 
      Log.d("ImagePreviewActivity", "Image is properly oriented"); 
      default: 
       Log.d("ImagePreviewActivity", "The value of orientation is "+orientation); 
    } 
    return rotation; 
} 

private Bitmap rotateBitmap(String pathName,int rotation) 
{ 
    Bitmap bmp=BitmapFactory.decodeFile(pathName); 
    Matrix matrix=new Matrix(); 
    matrix.postRotate(90); 
    //start from x=0,y=0 and filter=false 
    Bitmap rotatedBitmap=Bitmap.createBitmap(bmp,0,0,bmp.getWidth(),bmp.getHeight(),matrix,false); 
    return rotatedBitmap; 
} 

EDIT:

Результирующее изображение было правильно отображать, когда я беру картину в пейзаже , однако при съемке в портретном режиме он возвращает повернутое изображение (90 градусов). В настоящее время я использую метод на основе EXIF.

+0

какие-либо журналы, чтобы указать нам правильное направление? – njzk2

ответ

1

Убедитесь, что путь, в котором вы проходите, не имеет «file: //» в начале его. ExifInterface не выдает ошибки или ничего, если ваш путь имеет префикс с этим, он просто возвращает значение по умолчанию для ориентации каждый раз.

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