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

Фон

Создавая приложение, которое имеет много высококачественных изображений, яМы решили уменьшить изображение до необходимого размера (это означает, что если изображение больше экрана, я уменьшу его).

Проблема я

мы заметили, что на некоторых устройствах, если изображения уменьшены, они становятся размытыми / пикселированными, но на тех же устройствах, для того же целевого размера imageView, если изображения не 'они не очень хорошо выглядят.

Что я'мы пытались

Мы решили проверить эту проблему дальше и создали небольшое POC-приложение, которое показывает проблему.

Прежде чем показывать вам код, здесьдемонстрация того, что яЯ говорю о:

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

public class MainActivity extends Activity
  {
  @Override
  protected void onCreate(final Bundle savedInstanceState)
    {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    final ImageView originalImageView=(ImageView)findViewById(R.id.originalImageView);
    final ImageView halvedImageView=(ImageView)findViewById(R.id.halvedImageView);
    final ImageView halvedBitmapImageView=(ImageView)findViewById(R.id.halvedBitmapImageView);
    //
    final Bitmap originalBitmap=BitmapFactory.decodeResource(getResources(),R.drawable.test);
    originalImageView.setImageBitmap(originalBitmap);
    halvedImageView.setImageBitmap(originalBitmap);
    //
    final LayoutParams layoutParams=halvedImageView.getLayoutParams();
    layoutParams.width=originalBitmap.getWidth()/2;
    layoutParams.height=originalBitmap.getHeight()/2;
    halvedImageView.setLayoutParams(layoutParams);
    //
    final Options options=new Options();
    options.inSampleSize=2;
    // options.inDither=true; //didn't help
    // options.inPreferQualityOverSpeed=true; //didn't help
    final Bitmap bitmap=BitmapFactory.decodeResource(getResources(),R.drawable.test,options);
    halvedBitmapImageView.setImageBitmap(bitmap);
    }
  }

XML:


  
    


      

      

      

      

      

      

    
  

Вопрос

Почему это происходит?

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

Я пытался играть с методом понижающей дискретизации, но ничего не помогло.

Использование inDensity (вместо inSampleSize), кажется, исправляет это, но яЯ не уверен, что установить для этого. Я думаю, что для внешних изображений (например, из Интернета) я могу установить плотность экрана, умноженную на размер выборки, который я хочу использовать.

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

РЕДАКТИРОВАТЬ: Ямы нашли трюк, чтобы узнать, какая плотность используется для рисования, получаемого из ресурсов (ссылка здесь) однако это неt будущее, так как вы должны быть конкретны для определения плотности.

Ответы на вопрос(3)

Ваш ответ на вопрос