2017-02-17 2 views
1

У меня есть проблема с изображением на Samsung устройства Каждый раз, когда я Сфотографировать вертикальную форму, но когда он называет образ галереи в классе Вертикально Он запрограммирован с классом ExifInterface и я не могу найти результатФото ориентации в ImageView с Samsung мобильный телефон

Каждый раз, когда я беру картину, которую я называю мой класс PreviewImage который где я показываю изображение Впоследствии у меня есть кнопка, которая берет меня, чтобы назначить фотографию в профиле у меня есть этот метод onActivityResult

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == Activity.RESULT_OK) { 
     try { 
      ExifInterface exifInterface = new ExifInterface(photoFile.getAbsolutePath()); 
      int exif = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL); 
      switch (exif) { 
       case ExifInterface.ORIENTATION_ROTATE_90: 
        orientation = 90; 
        break; 
       case ExifInterface.ORIENTATION_ROTATE_180: 
        orientation = 180; 
        break; 
       case ExifInterface.ORIENTATION_ROTATE_270: 
        orientation = 270; 
        break; 
      } 
     } catch (Exception e) { 
      Log.d("tmessages", e.toString()); 
     } 
     Intent intent = new Intent(this, PhotoViewer.class); 
     intent.putExtra(EXTRA_PHOTO_PATH, photoFile.getAbsolutePath()); 
     intent.putExtra(EXTRA_PHOTO_ORIENTATION, orientation); 
     intent.putExtra(EXTRA_PHOTO_EDIT, false); 
     startActivityForResult(intent, 10); 

    } 

И это мой Фотопроектор класс

private void sendPicture() { 
     Intent returnIntent = new Intent(); 
     returnIntent.putExtra("photoDescription", photoDescription.getText().toString()); 
     returnIntent.putExtra("photoPath", localPath); 
     returnIntent.putExtra("orientation", orientation); 
     setResult(Activity.RESULT_OK, returnIntent); 
     finish(); 
    } 

После того, как фотография сделана она возвращает меня к методу onActivityResult класса профиля, из которого он был назван

else if (requestCode == 10 && resultCode == Activity.RESULT_OK) { 
     if (photoFile != null&&LoginController.getInstance().xmppConnection.isConnected()) { 
      byte[] photo = AndroidUtilities 
        .createProfileImage(photoFile.getAbsolutePath()); 
      ProfileManager.getInstance().publishPhoto(photo); 
      Bitmap decodedByte = BitmapFactory.decodeByteArray(photo, 0, photo.length); 
      avatar.setImageBitmap(decodedByte); 
     }else{ 
      Toast.makeText(this,R.string.LabelProfilePhotoFailed, Toast.LENGTH_SHORT).show(); 
     } 
    } 

Как я могу сделать шоу изображения меня вертикально на фотографии профиля?

+0

Можете ли вы использовать фразы типа «портрет» и «пейзаж» вместо «вертикали». Ваш вопрос непонятен. Можете ли вы просмотреть и изменить его, поскольку вы говорите, что хотите показать вертикальное изображение, ваш комментарий говорит о том, что он уже показывает вертикаль. –

ответ

0

Вы сделали половину своей работы! Просто используйте ориентацию вы рассчитанной до:

else if (requestCode == 10 && resultCode == Activity.RESULT_OK) { 
    if (photoFile != null&&LoginController.getInstance().xmppConnection.isConnected()) { 
     byte[] photo = AndroidUtilities 
       .createProfileImage(photoFile.getAbsolutePath()); 
     ProfileManager.getInstance().publishPhoto(photo); 
     Bitmap decodedByte = BitmapFactory.decodeByteArray(photo, 0, photo.length); 
->  decodedByte = rotate(decodedByte, orientation); 
     avatar.setImageBitmap(decodedByte); 
    }else{ 
     Toast.makeText(this,R.string.LabelProfilePhotoFailed, Toast.LENGTH_SHORT).show(); 
    } 
} 

При ориентации = getIntent() getExtras() GetInt (EXTRA_PHOTO_ORIENTATION)...

private static Bitmap rotate(Bitmap bm, int rotation) { 
    if (rotation != 0) { 
     Matrix matrix = new Matrix(); 
     matrix.postRotate(rotation); 
     Bitmap bmOut = Bitmap.createBitmap(bm, 0, 0, bm.getWidth(), bm.getHeight(), matrix, true); 
     return bmOut; 
    } 
    return bm; 
} 
+0

Привет, друг, прежде всего, спасибо за помощь, которая создала метод для поворота приватный поворот растрового изображения (растровое изображение декодированного изображения, ориентация int) { ориентация = getIntent(). GetExtras(). GetInt (EXTRA_PHOTO_ORIENTATION); return decodedByte; } Но я не получаю правильную ротацию, которая растет, что я продолжаю терпеть неудачу? – Devix

+0

Друг действительно спасибо, еще один вопрос? Как я могу контролировать в любой момент, если я возьму горизонтальную фотографию и фотография останется вертикальной? Благодаря тому, что вы предоставили мне вертикальную фотографию, и это было то, что я хотел, но сделайте тест, снимающий фотографию в ландшафтном режиме, и я сломал изображение, вы знаете, что это может быть? Заранее благодарю вас. – Devix

+0

Попробуйте добавить эту строку: getContentResolver(). NotifyChange (photoFile, null); перед использованием ExifInterface exifInterface = new ExifInterface (photoFile.getAbsolutePath()); Если бы мой ответ помог вам, не могли бы вы поддержать или принять мой ответ :)? –

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