android - usos - programas para la edicion de imagenes vectoriales
Dibuja mapas de bits suavemente escalados en lienzo (4)
Así es como dibujo Bitmap
en Canvas
en mi aplicación de Android:
canvas.save();
canvas.scale(scale, scale, x, y);
canvas.drawBitmap(bitmap, x, y, null);
canvas.restore();
Sin embargo, el Bitmap
no se escala correctamente, no se realiza ningún suavizado. ¿Cómo puedo habilitar anti-aliasing?
¿Ha intentado crear un objeto Paint
, llamando a setAntiAlias(true)
en él y pasándolo al método drawBitmap
como el 4to parámetro? Si esto no funciona, creo que debería reducir la llamada de drawBitmap
lugar de escalar el Canvas, por ejemplo, utilizando drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint)
.
Ambos Paint paint = new Paint(Paint.FILTER_BITMAP_FLAG);
o paint.setFilterBitmap(true);
funcionó para mí pero ten mucho cuidado, en mi juego redujo el FPS de 30FPS
a 17FPS
solamente. Entonces, si se trata de un dibujo de misión crítica como en un juego, es mejor escalar la imagen en el momento de la carga. Lo que 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;
}
Prueba esto:
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setFilterBitmap(true);
paint.setDither(true);
canvas.drawBitmap(bitmap, x, y, paint);
Utilizar:
canvas.drawBitmap(source, 0, 0, new Paint(Paint.ANTI_ALIAS_FLAG));