Как отобразить пикселированный ImageView без интерполяции файлов с низким разрешением? - PullRequest
0 голосов
/ 01 октября 2018

Я хочу загрузить ImageView с png-файлом с низким разрешением.Я хочу отобразить пиксели, но ImageView отображает их размытым с интерполяцией.Как этого можно избежать?Я хочу отобразить все пиксели.

Это способ отображения ImageView:

Drawable dr = getResources().getDrawable(R.drawable.cloud);
Bitmap cloud1Bitmap = ((BitmapDrawable) dr).getBitmap();
float cloud1Ratio = (float)cloud1Bitmap.getHeight()/cloud1Bitmap.getWidth();

cloud1ImageView = new ImageView(this);
cloud1ImageView.setLayoutParams(new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
cloud1ImageView.setImageBitmap(Bitmap.createScaledBitmap(cloud1Bitmap, cloud1Width, (int) (cloud1Width*cloud1Ratio), true));
main.addView(cloud1ImageView);

РЕДАКТИРОВАТЬ:

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

    view.setLayoutParams(new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

    width = (int) (sw/3);
    Drawable dr = context.getResources().getDrawable(R.drawable.ufo);
    BitmapDrawable bd = ((BitmapDrawable) dr);
    Bitmap bitmap = bd.getBitmap();
    float ratio = (float)bitmap.getHeight()/bitmap.getWidth();
    height = (int)(width*ratio);

    BitmapDrawable drawable = new BitmapDrawable(context.getResources(), Bitmap.createScaledBitmap(bitmap, width, height, false));
    drawable.setFilterBitmap(false);        
    view.setImageDrawable(drawable);

Слева вы можете видеть, как изображение появляется в игре, а справа как в оригинальном png:

enter image description here

1 Ответ

0 голосов
/ 01 октября 2018

Как говорит @pskink, вы можете остановить размытие / интерполяцию, вызвав setFilterBitmap(false).В этих примерах я использую изображение 24px в 240dp ImageView:

Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_android);
BitmapDrawable drawable = new BitmapDrawable(getResources(), bitmap);

ImageView image = findViewById(R.id.image);
image.setImageDrawable(drawable);

enter image description here

Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_android);
BitmapDrawable drawable = new BitmapDrawable(getResources(), bitmap);
drawable.setFilterBitmap(false);

ImageView image = findViewById(R.id.image);
image.setImageDrawable(drawable);

enter image description here

...