2016-12-22 10 views
0

Мое изображение вращается, когда я использую камеру. После захвата изображения я отправлю это изображение в другое действие, используя Intent и установив этот рисунок в качестве фона Layout, но захват изображения в ландшафте повернет изображение.Почему изображение поворачивается после съемки с камеры и отправляется на другое мероприятие?

+0

можете ли вы опубликовать часть своего кода? –

+0

Использование скольжения для отображения изображения –

ответ

0

Вы можете решить эту проблему с помощью ExitInterface показано ниже:

private void setPic(Uri contentUri) throws IOException { 
     // Get the dimensions of the View 
     int targetW = uploadedImage.getWidth(); 
     int targetH = uploadedImage.getHeight(); 

     // Get the dimensions of the bitmap 
     BitmapFactory.Options bmOptions = new BitmapFactory.Options(); 
     bmOptions.inJustDecodeBounds = true; 
     BitmapFactory.decodeFile(mCurrentPhotoPath, bmOptions); 

     // Decode the image file into a Bitmap sized to fill the View 
     bmOptions.inJustDecodeBounds = false; 
     bmOptions.inSampleSize = calculateInSampleSize(bmOptions, targetW, targetH); 

     Bitmap bitmap = BitmapFactory.decodeFile(mCurrentPhotoPath, bmOptions); 
     bitmap = rotateImageIfRequired(bitmap, contentUri); 
     bitmap = ThumbnailUtils.extractThumbnail(bitmap, 750, 750); 
     uploadedImage.setImageBitmap(bitmap); 
    } 

Эта функция где растровый декодируется, основываясь на пути в телефоне, то тогда вызов rotateImageIfRequired() который будет определять, какие образ должен вращаться, прежде чем он будет установлен на фон вашего макета. В этом случае uploadedImage - это ваш макет.

private Bitmap rotateImageIfRequired(Bitmap img, Uri contentUri) throws IOException { 
     ExifInterface ei = new ExifInterface(contentUri.getPath()); 
     int orientation = ei.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL); 

     switch (orientation) { 
      case ExifInterface.ORIENTATION_ROTATE_90: 
       return rotateImage(img, 90); 
      case ExifInterface.ORIENTATION_ROTATE_180: 
       return rotateImage(img, 180); 
      case ExifInterface.ORIENTATION_ROTATE_270: 
       return rotateImage(img, 270); 
      default: 
       return img; 
     } 
    } 

Эта функция определяет, какая ориентация изображения после ее декодирования и до ее установки.

private static Bitmap rotateImage(Bitmap img, int degree) { 
     Matrix matrix = new Matrix(); 
     matrix.postRotate(degree); 
     Bitmap rotatedImg = Bitmap.createBitmap(img, 0, 0, img.getWidth(), img.getHeight(), matrix, true); 
     img.recycle(); 
     return rotatedImg; 
    } 

Эта функция поворачивает изображение и возвращает новое изображение.

Надеюсь, это поможет.

+0

вообще не помогло? –