Zeichnen Sie problemlos skaliert Bitmaps auf Leinwand
-
28-09-2019 - |
Frage
Dies ist, wie ich Bitmap
auf Canvas
in meiner Android app ziehen:
canvas.save();
canvas.scale(scale, scale, x, y);
canvas.drawBitmap(bitmap, x, y, null);
canvas.restore();
Doch die Bitmap
nicht gleichmäßig skaliert wird, kein Anti-Aliasing durchgeführt wird. Wie kann ich aktivieren Anti-Aliasing?
Lösung
Versuchen Sie diese:
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setFilterBitmap(true);
paint.setDither(true);
canvas.drawBitmap(bitmap, x, y, paint);
Andere Tipps
Sowohl Paint paint = new Paint(Paint.FILTER_BITMAP_FLAG);
oder paint.setFilterBitmap(true);
für mich gearbeitet, aber sehr vorsichtig sein, auf meinem Spiel schnitt die FPS von 30FPS
nach unten nur 17FPS
. Also, wenn es sich um eine unternehmenskritische Zeichnung wie in einem Spiel ist besser Sie das Bild beim Laden skalieren. Welche habe ich auf die folgende Weise:
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;
}
Haben Sie versucht, ein Paint
Objekt erstellen, rufen setAntiAlias(true)
darauf und Übergabe an die drawBitmap
Methode als 4. Parameter? Wenn dies nicht funktioniert denke ich Ihnen den drawBitmap
Aufruf verkleinere sollten stattdessen die Leinwand der Skalierung, z.B. Mit der Funktion drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint)
.
Verwendung:
canvas.drawBitmap(source, 0, 0, new Paint(Paint.ANTI_ALIAS_FLAG));