2014-02-18 3 views
0

У меня есть ImageView в RelativeLayout и во время разработки я загружаю из ресурсов в 144x144 PNG изображение и все выглядит хорошо:ImageView сжимается, когда изображение заменяется другим изображением того же размера

enter image description here

Теперь, в коде, я сфотографировать с камерой и обрезать его до 144x144 и загрузить его в поле зрения изображения:

imageViewMyPicture.setImageBitmap(bitmap); 

но теперь ImageView сжимается:

enter image description here

Оба изображения имеют одинаковый размер на 100%, 144x144, и если я загружаю второе изображение в изображениеView во время разработки, размер загружается нормально.

Что я делаю неправильно?

ответ

1

Вам необходимо учитывать плотность при создании масштабированного растрового изображения. Так как ваш ImageView имеет правильные размеры перед установкой нового растрового изображения, в вашем случае вы можете использовать только размеры вашего ImageView при масштабировании нового Bitmap ... Например:

Я полагаю, вы используете Uri сек для извлечения сохраненного изображения из файловой системы после его взятия. Если вы используете File, просто используйте Uri.fromFile(file), чтобы получить Uri. Я обычно использую AsyncTask для достижения этой цели, так как вы должны сделать обработку Bitmap от основного потока ... вот некоторый Суд код (не в AsyncTask для простоты, но легко переработан):

//Somewhere in your Activity 

public void scaleAndSetBitmap(ImageView imageView, Uri uri){ 
      InputStream stream = null; 
      Bitmap bitmap = null; 

      try { 
      stream = getContentResolver().openInputStream(uri); 
      bitmap = BitmapFactory.decodeStream(stream, null, options); 

       if (image_view != null && bitmap != null) { 
       bitmap = Bitmap.createScaledBitmap(bitmap, image_view.getWidth(), image_view.getHeight(), true); 
       image_view.setImageBitmap(bitmap); 
       } 
      } catch(Exception e){ 
       e.printStackTrace(); 
       return; 
      } finally { 
       try{ 
        stream.close(); 
       } catch(IOException i){ 
        return; 
       } 
      } 
} 
1

Убедитесь, что при загрузке изображений учитывается плотность устройства, на котором вы работаете. Вы думаете, что у вас есть 144x144, но это может быть файл необработанного изображения, но при надевании устройства с высокой плотностью оно будет отображаться ближе к 200x200. Затем, когда вы вырезаете изображение камеры как 144x144, у вас есть необработанный размер, но не размер с поправкой на плотность. Простой способ убедиться в том, что вы получаете это, чтобы читать изображения с использованием ресурсов:

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

selectImg = BitmapFactory.decodeResource(getResources(), R.drawable.drop_device); 
Смежные вопросы