Как масштабировать пиксельную графику в Android Canvas без искажений

Я работаю над игрой, которая содержит потерянные спрайты пиксельного искусства с низким разрешением. Спрайты имеют размер 16 на 16 пикселей, но они будут масштабированы, чтобы заполнить большую часть экрана. Я использую BitmapFactory для загрузки изображения, а затем использую createScaledBitmap для масштабирования изображений. При этом они визуализируются на экране размытым. Я попытался отключить сглаживание, сглаживание и растровую фильтрацию без успеха. Вот части класса представления, с которым я рисую спрайты.

public NinjaDisplay(Context context, Point size) {
    super(context);

    m_context = context;

    m_ScreenWidth = size.x;
    m_ScreenHeight = size.y;

    m_Holder = getHolder();
    m_Paint = new Paint();

    m_Paint.setAntiAlias(false);
    m_Paint.setDither(false);
    m_Paint.setFilterBitmap(false);

    startGame();

}

public void drawGame() {
    if (m_Holder.getSurface().isValid()) {
        m_Canvas = m_Holder.lockCanvas();

        m_Canvas.drawColor(Color.argb(255, 0, 0, 0));

        m_Paint.setColor(Color.argb(255, 255, 255, 255));

        m_Paint.setTextSize(30);
        m_Canvas.drawText(debugText, 10, 30, m_Paint);

        Bitmap bitmapNinjaRaw = BitmapFactory.decodeResource(this.getResources(), R.drawable.ninja);
        Bitmap bitmapNinja = Bitmap.createScaledBitmap(bitmapNinjaRaw, (bitmapNinjaRaw.getWidth()*10), (bitmapNinjaRaw.getHeight()*10), false);

        m_Canvas.drawBitmap(bitmapNinja, x, y, m_Paint);

        m_Holder.unlockCanvasAndPost(m_Canvas);
    }
}

0 ответов

Другие вопросы по тегам