Нарисуйте плавные растровые изображения на холсте - PullRequest
30 голосов
/ 28 ноября 2010

Вот как я рисую Bitmap на Canvas в моем приложении для Android:

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

Однако Bitmap не масштабируется плавно, сглаживание не выполняется.Как включить сглаживание?

Ответы [ 4 ]

73 голосов
/ 28 ноября 2010

Попробуйте это:

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

canvas.drawBitmap(bitmap, x, y, paint);
17 голосов
/ 22 января 2012

Оба 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;
}
3 голосов
/ 28 ноября 2010

Вы пытались создать объект Paint, вызывая setAntiAlias(true) и передавая его методу drawBitmap в качестве 4-го параметра?Если это не работает, я полагаю, вам следует уменьшить масштаб вызова drawBitmap вместо масштабирования Canvas, например, используя drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint).

0 голосов
/ 10 октября 2014

Использование:

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