Pregunta

Esto es cómo dibujo Bitmap en Canvas en mi aplicación Android:

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

Sin embargo, el Bitmap no se escala sin problemas, no se realiza ninguna anti-aliasing. ¿Cómo puedo activar el suavizado?

¿Fue útil?

Solución

Prueba esto:

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

canvas.drawBitmap(bitmap, x, y, paint);

Otros consejos

Tanto Paint paint = new Paint(Paint.FILTER_BITMAP_FLAG); o paint.setFilterBitmap(true); trabajaron para mí, pero tener mucho cuidado, en mi juego se redujo el FPS de 30FPS a 17FPS solamente. Por lo tanto si se trata de un dibujo de misión crítica como en un juego se escala mejor la imagen en tiempo de carga. Lo cual hice de la siguiente manera:

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

Ha intentado crear un objeto Paint, llamando setAntiAlias(true) en él y pasarlo al método drawBitmap como el cuarto parámetro? Si esto no funciona, supongo que debe de bajar la llamada drawBitmap en lugar de escalar el lienzo, por ejemplo, mediante el uso de drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint) .

Uso:

canvas.drawBitmap(source, 0, 0, new Paint(Paint.ANTI_ALIAS_FLAG)); 
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top