これは、AndroidアプリでBitmap
にCanvas
を描画する方法です。
canvas.save();
canvas.scale(scale, scale, x, y);
canvas.drawBitmap(bitmap, x, y, null);
canvas.restore();
ただし、Bitmap
はスムーズにスケーリングされず、アンチエイリアスは実行されません。アンチエイリアスを有効にするにはどうすればよいですか?
これを試して:
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を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;
}
Paint
オブジェクトを作成し、その上で setAntiAlias(true)
を呼び出して、4番目のパラメーターとしてdrawBitmap
メソッドに渡しましたか?これが機能しない場合、Canvasをスケーリングするのではなく、drawBitmap
呼び出しをスケールダウンする必要があると思います。 drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint)
を使用します。
使用する:
canvas.drawBitmap(source, 0, 0, new Paint(Paint.ANTI_ALIAS_FLAG));