2015-06-18 3 views
2

У меня возникли проблемы с фотографиями, сделанными с камерой мобильного телефона. Когда я делаю снимок, и я его сохраняю, мой мобильный телефон показывает его с оригинальным размером, но когда я пытаюсь открыть ту же фотографию в своем приложении, она выводит повернутую фотографию, такую ​​как:Поворот автоматически фотографий, сделанных с помощью смартфона

Оригинальная фотография:

http://i.imgur.com/P7nlfnC.png

повернутого фото:

enter image description here

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

Я использую следующий код для выбора галереи:

private void selectImage() { 

     final CharSequence[] options = {"My gallery","Cancel" }; 

     AlertDialog.Builder builder = new AlertDialog.Builder(PhotosActivity.this); 
     builder.setTitle("Add Photo!"); 
     builder.setItems(options, new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int item) { 
       if (options[item].equals("My gallery")) 
       { 
        Intent intent = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
        startActivityForResult(intent, 2); 

       } 
       else if (options[item].equals("Cancel")) { 
        dialog.dismiss(); 
       } 
      } 
     }); 
     builder.show(); 
    } 

Чтобы выбрать фото:

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

      Uri selectedImage = data.getData(); 
      String[] filePath = { MediaStore.Images.Media.DATA }; 
      Cursor c = getContentResolver().query(selectedImage,filePath, null, null, null); 
      c.moveToFirst(); 
      int columnIndex = c.getColumnIndex(filePath[0]); 
      String picturePath = c.getString(columnIndex); 
      c.close(); 
      Bitmap thumbnail = (BitmapFactory.decodeFile(picturePath)); 

      if (thumbnail.getWidth() > thumbnail.getHeight()) { 
       Matrix matrix = new Matrix(); 
       matrix.postRotate(90); 
       thumbnail = Bitmap.createBitmap(thumbnail , 0, 0, thumbnail.getWidth(), thumbnail.getHeight(), matrix, true); 
      } 

      int nh = (int) (thumbnail.getHeight() * (612.0/thumbnail.getWidth())); 
      Bitmap scaled = Bitmap.createScaledBitmap(thumbnail, 612, nh, true); 

      ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
      scaled.compress(Bitmap.CompressFormat.JPEG, 90, stream); 

      byte [] byte_arr = stream.toByteArray(); 
      String image_str = Base64.encodeBytes(byte_arr); 

      newtask = new saveImage(); 
      newtask.execute(image_str,sessionid); 

      Toast.makeText(getBaseContext(), "Nice!", 
      Toast.LENGTH_LONG).show(); 

     } 
    } 
} 

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

if (thumbnail.getWidth() > thumbnail.getHeight()) { 
        Matrix matrix = new Matrix(); 
        matrix.postRotate(90); 
        thumbnail = Bitmap.createBitmap(thumbnail , 0, 0, thumbnail.getWidth(), thumbnail.getHeight(), matrix, true); 
       } 

Спасибо.

ответ

0

Вам необходимо запросить ориентацию из медиастора (это ImageColumns.ORIENTATION).
Попробуйте изменить эту строку: matrix.postRotate(90); к matrix.postRotate(270);

+0

Я искал, как получить ориентацию, я нашел решение, я использовал эту функцию здесь: http://stackoverflow.com/questions/21085105/get-orientation-of-image -из медиа-данных-изображений-медиа-данных и измененной матрицы.postRotate (90); к matrix.postRotate (getExifOrientation (picturePath)); Сейчас работает нормально. –

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