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

时间:2010-11-27 21:48:30

标签: android android-canvas antialiasing

这是我在Android应用中Bitmap上绘制Canvas的方式:

canvas.save();
canvas.scale(scale, scale, x, y);
canvas.drawBitmap(bitmap, x, y, null);
canvas.restore();

然而Bitmap没有平滑缩放,不会执行抗锯齿。如何启用抗锯齿?

4 个答案:

答案 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));