Disegnare bitmap senza intoppi in scala su tela di canapa
-
28-09-2019 - |
Domanda
Questo è il modo traggo Bitmap
sul Canvas
nella mia app Android:
canvas.save();
canvas.scale(scale, scale, x, y);
canvas.drawBitmap(bitmap, x, y, null);
canvas.restore();
Tuttavia il Bitmap
non viene scalato senza intoppi, senza anti-aliasing viene eseguita. Come posso abilitare l'anti-aliasing?
Soluzione
Prova questo:
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setFilterBitmap(true);
paint.setDither(true);
canvas.drawBitmap(bitmap, x, y, paint);
Altri suggerimenti
Sia Paint paint = new Paint(Paint.FILTER_BITMAP_FLAG);
o paint.setFilterBitmap(true);
hanno lavorato per me, ma essere molto attenti, sul mio gioco è abbattuto l'FPS da 30FPS
a 17FPS
solo. Quindi, se si tratta di un disegno mission critical come in un gioco è meglio scalare l'immagine in fase di caricamento. Cosa che ho fatto nel seguente modo:
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;
}
Hai provato la creazione di un oggetto Paint
, chiamando setAntiAlias(true)
su di esso e passarlo al metodo drawBitmap
come il 4 ° parametro? Se questo non funziona Credo che si dovrebbe ridimensionare la chiamata drawBitmap
invece di scalare il Canvas, ad esempio, utilizzando drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint)
.
Usa:
canvas.drawBitmap(source, 0, 0, new Paint(Paint.ANTI_ALIAS_FLAG));