Dibujar mapas de bits sin problemas a escala en la lona
-
28-09-2019 - |
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?
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));