在Canvas上绘制平滑缩放的位图

fhu*_*cho 30 android antialiasing android-canvas

这是我画BitmapCanvas的我的Android应用:

canvas.save();
canvas.scale(scale, scale, x, y);
canvas.drawBitmap(bitmap, x, y, null);
canvas.restore();
Run Code Online (Sandbox Code Playgroud)

但是,Bitmap没有平滑缩放,不执行抗锯齿.如何启用抗锯齿功能?

Vit*_*nko 74

试试这个:

Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setFilterBitmap(true);
paint.setDither(true);

canvas.drawBitmap(bitmap, x, y, paint);
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,它工作,我只使用`Paint paint = new Paint(Paint.FILTER_BITMAP_FLAG); (15认同)
  • 我对此并不高兴.您是在向上还是向下缩放图像? (4认同)

Sil*_*ria 17

无论是对我Paint paint = new Paint(Paint.FILTER_BITMAP_FLAG);还是paint.setFilterBitmap(true);为我工作但是要非常小心,在我的游戏中它将FPS从仅减少30FPS17FPS了.因此,如果它是像游戏中一样的关键任务绘图,则可以在加载时更好地缩放图像.我用以下方式做了什么:

public Bitmap getImage (int id, int width, int height) {
    Bitmap bmp = BitmapFactory.decodeResource( getResources(), id );
    Bitmap img = Bitmap.createScaledBitmap( bmp, width, height, true );
    bmp.recycle();
    return img;
}
Run Code Online (Sandbox Code Playgroud)