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

这是我如何在我的Android应用程序的Canvas上绘制Bitmap

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

但是, Bitmap不能平滑缩放,不会执行抗锯齿。 我如何启用抗锯齿?

Solutions Collecting From Web of "在canvas上绘制平滑缩放的位图"

尝试这个:

 Paint paint = new Paint(); paint.setAntiAlias(true); paint.setFilterBitmap(true); paint.setDither(true); canvas.drawBitmap(bitmap, x, y, paint); 

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; } 

你有没有尝试创build一个Paint对象,调用setAntiAlias(true)并将其作为第四个parameter passing给drawBitmap方法? 如果这不起作用,我想你应该缩小drawBitmap调用,而不是缩放canvas,例如通过使用drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint)

使用:

 canvas.drawBitmap(source, 0, 0, new Paint(Paint.ANTI_ALIAS_FLAG));