Ответ 1
Попробуйте следующее:
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setFilterBitmap(true);
paint.setDither(true);
canvas.drawBitmap(bitmap, x, y, paint);
Вот как я рисую Bitmap
в Canvas
в своем приложении для Android:
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)
и передавая его методу drawBitmap
в качестве 4-го параметр? Если это не работает, я предполагаю, что вы должны масштабировать вызов drawBitmap
вместо масштабирования холста, например. используя drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint)
.
Использование:
canvas.drawBitmap(source, 0, 0, new Paint(Paint.ANTI_ALIAS_FLAG));