这是我在Android应用中Bitmap
上绘制Canvas
的方式:
canvas.save();
canvas.scale(scale, scale, x, y);
canvas.drawBitmap(bitmap, x, y, null);
canvas.restore();
然而Bitmap
没有平滑缩放,不会执行抗锯齿。如何启用抗锯齿?
答案 0 :(得分:72)
试试这个:
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setFilterBitmap(true);
paint.setDither(true);
canvas.drawBitmap(bitmap, x, y, paint);
答案 1 :(得分:17)
Paint paint = new Paint(Paint.FILTER_BITMAP_FLAG);
或paint.setFilterBitmap(true);
都为我工作但是非常小心,在我的游戏中它只将FPS从30FPS
减少到17FPS
。因此,如果它是像游戏中一样的关键任务绘图,则可以在加载时更好地缩放图像。我以下列方式做了什么:
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;
}
答案 2 :(得分:3)
您是否尝试过创建Paint
对象,在其上调用setAntiAlias(true)
并将其作为第4个参数传递给drawBitmap
方法?如果这不起作用,我猜你应该缩小drawBitmap
调用而不是缩放画布,例如:使用drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint)
。
答案 3 :(得分:0)
使用:
canvas.drawBitmap(source, 0, 0, new Paint(Paint.ANTI_ALIAS_FLAG));