Как масштабировать пиксельную графику в 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);
}
}