web-dev-qa-db-ja.com

Canvasにスムーズにスケーリングされたビットマップを描画します

これは、AndroidアプリでBitmapCanvasを描画する方法です。

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

ただし、Bitmapはスムーズにスケーリングされず、アンチエイリアスは実行されません。アンチエイリアスを有効にするにはどうすればよいですか?

30
fhucho

これを試して:

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

canvas.drawBitmap(bitmap, x, y, Paint);
73
Vit Khudenko

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

Paintオブジェクトを作成し、その上で setAntiAlias(true) を呼び出して、4番目のパラメーターとしてdrawBitmapメソッドに渡しましたか?これが機能しない場合、Canvasをスケーリングするのではなく、drawBitmap呼び出しをスケールダウンする必要があると思います。 drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint) を使用します。

3
mreichelt

使用する:

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