32

これが私のAndroidアプリでの利用Bitmap方法です。Canvas

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

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

4

4 に答える 4

80

これを試して:

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

canvas.drawBitmap(bitmap, x, y, paint);
于 2010-11-27T22:12:36.003 に答える
18

両方Paint paint = new Paint(Paint.FILTER_BITMAP_FLAG);または私のために働いたが、非常に注意してください、私のゲームでは、FPSをからのみpaint.setFilterBitmap(true);に削減しました。したがって、ゲームのようにミッションクリティカルな描画である場合は、読み込み時に画像を拡大縮小する方が適切です。私は次の方法でこれを行いました: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;
}
于 2012-01-22T03:16:47.407 に答える
2

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

于 2010-11-27T22:09:11.897 に答える
0

必要なコードは1行だけです。

canvas.drawBitmap(bitmap, x, y, new Paint(Paint.ANTI_ALIAS_FLAG)); 

5行ではありません

于 2014-10-10T02:08:10.197 に答える