it-swarm.com.de

Verwenden der Methode -canvas.drawBitmap (Bitmap, src, dst, Paint)

Bei jeder Verwendung dieses Codes wird nichts gezeichnet. Ich muss eine Bitmap innerhalb eines angegebenen Rechtecks ​​zeichnen.

canvas.drawBitmap(MyBitmap, null, rectangle, null)

Ich habe online gesucht, finde aber nicht viel Hilfe.

20
Kohler Fryer

EDIT


Die ursprüngliche Antwort ist falsch. Mit sourceRect können Sie einen Teil einer zu zeichnenden Bitmap angeben. Es kann null sein. In diesem Fall wird das gesamte Bild verwendet.

Laut dem Kommentar der Fritteuse, den er unter etwas gezeichnet hat, werde ich eine Anmerkung dazu hinzufügen.

drawBitmap(bitmap, srcRect, destRect, Paint) behandelt nicht Z ordering (depth) und die Reihenfolge des Aufrufs von Draw on Object ist von Bedeutung.

Wenn Sie 3 Formen zum Zeichnen haben, Quadrat, Dreieck und Kreis. Wenn das Quadrat oben sein soll, muss es zuletzt gezeichnet werden.


Sie haben keine Quelle angegeben, es wird also nichts gezeichnet.

Beispiel:

Sie haben eine Bitmap 100x100 Pixel. Sie möchten die gesamte Bitmap zeichnen.

canvas.drawBitmap(MyBitmap, new Rect(0,0,100,100), rectangle, null);

Sie möchten nur die linke Hälfte der Bitmap zeichnen.

canvas.drawBitmap(MyBitmap, new Rect(0,0,50,100), rectangle, null);

Sie müssen das Quellrechteck angeben. Das Quellrechteck kann ein Rechteck sein, das von 0,0 bis zur Breite und Höhe der Bitmap reicht.

29
triggs

Der wichtigste Punkt, den Sie bei der Definition des Rect beachten sollten:

  • links <rechts und oben <unten

Das Rechteck steht in Bildschirmkoordinaten (positives Y abwärts) ...

Ich finde es hilfreich, über die Argumente von Rect nachzudenken

(left, top, right, bottom)

wie

(X, Y, X + Width, Y + Height)

dabei ist X, Y die linke obere Ecke des Sprite-Bildes.

HINWEIS: Wenn Sie das Bild an einer bestimmten Stelle zentrieren möchten, denken Sie daran, diese Werte um die Hälfte der Sprite-Breite und -Höhe zu verschieben. Zum Beispiel:

int halfWidth = Width/2;
int halfHeight = Height/2
Rect dstRectForRender = new Rect( X - halfWidth, Y - halfHeight, X + halfWidth, Y + halfHeight );
canvas.drawBitmap ( someBitmap, null, dstRectForRender, null );

Dies verwendet das gesamte Originalbild (da src rect null ist) und skaliert es entsprechend der Größe und Position von dstRectForRender ... und verwendet die Standardfarbe Paint.

23
DevByStarlight

Ich weiß nicht warum, aber das hat für mich funktioniert!

Rect rectangle = new Rect(0,0,100,100);
canvas.drawBitmap(bitmap, null, rectangle, null);

Vielen Dank:)

1
Device