Как убрать размытие при отображении bitmap-объекта?

Рейтинг: 0Ответов: 1Опубликовано: 05.05.2023

Создал пустую биткарту 20 на 20 пикселей, после чего отрисовал каждый пиксель по отдельности с помощью циклов.

После отображения биткарты в ImageView изображение оказалось размытым, как это исправить?

Тут я создаю биткарту:

public class Render { // рендеринг карты

    private Bitmap bit; // создание биткарты
    private final ImageView map; // создание карты

    private final int width;
    private final int height;

    public Render(Context context, ImageView m, int w, int h) {
        width = w;
        height = h;
        map = m;
    }

    public void setup() { // настройка карты
        bit = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);  // создание пустой битмапы
    }

    public void generate(int x, int y, int color /* координаты пикселя и цвет */ ) { // первая прорисовка карты
        bit.setPixel(x, y, color);
    }

    public void finish() {
        map.setImageBitmap(bit); // установка биткарты поверх карты
    }

}

Тут я прорисовываю карту попиксельно:

public class Setup {

    public final int width;
    public final int height;
    private final ImageView map;

    public Setup(int w, int h, ImageView m) {
        width = w;
        height = h;
        map = m;
    }

    public void build() {
        Generator generator = new Generator();
        Render render = new Render(MainActivity.Context(), map, width, height);
        render.setup();
        for (int x = width - 1; x >= 0; x--) {
            for (int y = height - 1; y >= 0; y--) {
                Tile type = generator.generate();
                int color = 0;
                switch (type) {
                    case EMPTY: color = Color.rgb(100, 100, 100); break;
                    case TREE: color = Color.rgb(150, 255, 150); break;
                    case STONE: color = Color.rgb(200, 200, 200); break;
                    case GRASS: color = Color.rgb(0, 200, 0); break;
                    case BUSH: color = Color.rgb(80, 180, 0); break;
                }
                render.generate(x, y, color);
            }
        }
        render.finish();
    }

}

Скриншот эмулятора:

скриншот

Ответы

▲ 2Принят

Чтобы убрать размытие, оберните Bitmap в BitmapDrawable и воспользуйтесь методом setFilterBitmap:

Bitmap bitmap = ...;
BitmapDrawable drawable = new BitmapDrawable(context.getResources(), bitmap);
drawable.setFilterBitmap(false);
imageView.setImageDrawable(drawable);