2012-08-18 2 views
1

У меня есть код, в котором я вызываю галерею, чтобы выбрать изображение, которое я показываю в изображении. Это прекрасно работает и поддерживает соотношение сторон. Проблема заключается в том, когда размер изображения больше, чем 2048 х 2048 я использую этот код, когда это имеет место:Изменение размера растрового изображения, которое автоматически вращается

uriIsNowAbitmap = MediaStore.Images.Media.getBitmap (this.getContentResolver(), selectedImageUri);

   //... 

      int height = uriIsNowAbitmap.getHeight(); 
      int width = uriIsNowAbitmap.getWidth(); 

      if ((width>=2048)||(height>=2048)) { 

       int newheight = height/10; // height in pixels 
       int newwidth = width/10; // width in pixels  
       Bitmap avatarScaled = Bitmap.createScaledBitmap(uriIsNowAbitmap, newwidth, newheight, true); 

       previewNewAvatar.setImageBitmap(avatarScaled); 

}

также работает правильно, но с проблемой. Изображения не относятся к изображению с вращающимся ландшафтом

Чтобы попытаться объяснить, я приведу этот пример. Это картина в галерее:

enter image description here

когда я выбираю изображение и назначить его на ImageView, показана повернута:

enter image description here

Я не понимаю, почему. Я пробовал тысячу способов и прочитал много информации об изменении размера, я прочитал темы и пример кода для этого сайта (Android: high quality image resizing/scaling) и многие другие ... но ничего не помогает. Намерение состоит в том, чтобы показать, таким образом ... сделать это фотошоп :)

enter image description here

Я признателен за любую помощь, потребовалось много часов, пытаясь исправить

С уважением

+0

сделал вам удалось это исправить? У меня такая же проблема. – Rami

+0

Как вам удалось решить эту проблему? – Jithu

ответ

0

Во-первых, вам нужно будет определить изменение ориентации, и когда вы обнаружите изменение ландшафтной ориентации, вы просто поворачиваете свой растровый рисунок соответственно. Вам необходимо объявить свой битмап аватарScaled как глобальную переменную, чтобы получить доступ к ней в методе onConfigurationChanged() ниже:

Используйте метод onConfigurationChanged для определения изменения ориентации. Смотрите следующий код:

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
super.onConfigurationChanged(newConfig); 

if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { 
Matrix matrix = new Matrix(); 
matrix.postRotate(90); 
Bitmap rotated = Bitmap.createBitmap(avatarScaled, 0, 0, avatarScaled.getWidth(), 
            avatarScaled.getHeight(), matrix, true); 
previewNewAvatar.setImageBitmap(rotated); 
} 
} 

Вы также должны отредактировать соответствующий элемент в вашем файле манифеста включить андроида: configChanges Просто увидеть код ниже:

<activity android:name=".MyActivity" 
     android:configChanges="orientation|keyboardHidden" 
     android:label="@string/app_name"> 
+0

К сожалению, решение, которое вы предлагаете, не работает должным образом, поскольку такая же ситуация сохраняется. Большое вам спасибо за ваш интерес. Любые другие идеи? – Sergio76

+0

@MiguelC вы можете разместить больше кода, пожалуйста, желательно всю деятельность, в которой эта проблема возникает? –