web-dev-qa-db-fra.com

Utilisation de la méthode -canvas.drawBitmap (bitmap, src, dst, Paint)

Chaque fois que j'utilise ce code, rien n'est dessiné. Je dois dessiner un bitmap à l'intérieur d'un rectangle spécifié.

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

J'ai regardé en ligne mais je ne trouve pas beaucoup d'aide.

20
Kohler Fryer

MODIFIER 


La réponse d'origine est incorrecte . Vous pouvez utiliser sourceRect pour spécifier une partie d'un bitmap à dessiner . Elle peut être nulle, auquel cas toute l'image sera utilisée.

Selon le commentaire de la friteuse qu'il dessinait sous quelque chose, je vais ajouter une note à ce sujet.

drawBitmap(bitmap, srcRect, destRect, Paint) ne gère pas Z ordering (depth) et l’ordre d’appel dessine en fonction des objets.

Si vous avez 3 formes à dessiner, carré, triangle et cercle. Si vous voulez que le carré soit au sommet, vous devez le tracer en dernier. 


Vous n'êtes spécifié aucune source, donc ce n'est rien dessiné.

Exemple:

Vous avez un bitmap 100x100 pixels. Vous voulez dessiner le bitmap entier.

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

Vous voulez dessiner uniquement la moitié gauche du bitmap.

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

Vous devez spécifier le rect de la source, qui peut être un rectangle compris entre 0,0 et la largeur et la hauteur du bitmap.

29
triggs

L'élément principal à retenir lors de la définition du rect est:

  • gauche <droite et haut <bas

Le rect est en coordonnées d'écran (positif Y vers le bas) ...

Je trouve utile de penser aux arguments de Rect

(left, top, right, bottom)

comme

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

où X, Y est le coin supérieur gauche de l'image Sprite.

REMARQUE: Si vous souhaitez centrer l'image sur un emplacement particulier, n'oubliez pas de décaler ces valeurs de moitié par la largeur et la hauteur de l'image-objet. Par exemple:

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 );

Ceci utilise l'image originale entière (puisque src rect est null) et la redimensionne pour l'adapter à la taille et à la position de dstRectForRender ... en utilisant la peinture par défaut.

23
DevByStarlight

Je ne sais pas pourquoi mais cela a fonctionné pour moi!

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

Merci:)

1
Device