Recadrage d'une zone circulaire d'image bitmap dans Android
J'ai une image et je veux la culture d'une région circulaire de cette image. Tous les pixels à l'extérieur du cercle doit être transparente. Comment puis-je faire cela?
Vous devez vous connecter pour publier un commentaire.
Après un long brainstorming, j'ai trouvé la solution
static
et utilisés à des fins non-instancié utilitaire de la classe des analogues des méthodes statiques.canvas.drawCircle(bitmap.getWidth() / 2, bitmap.getHeight() / 2, bitmap.getWidth() / 2, paint);
pour générer Cercle de rectangles
Vous Pouvez faire votre imageview circulaire à l'aide de RoundedBitmapDrawable
voici le code pour la réalisation de roundedImageview:
@Gène fait un commentaire sur la réponse ci-dessus, qui a proposé d'utiliser
clipPath
comme une option pour le cadrage d'une image comme un cercle.Ce qui suit est un propre de la mise en œuvre de cette:
Ce qui pourrait être ajouté à une classe utilitaire.
c.drawBitmap(b, 0, 0, null);
, qui utilise la valeur par défaut de l'identité de la transformation.Je pense que cette solution fonctionne mieux avec n'importe quel type de rectangle, changer la taille en pixels si vous voulez une image de petite ou grande :
Cela peut être easlity fait en xml ainsi, sans recadrage le bitmap réelle, il Vous suffit de créer une image circulaire de masque et de le placer sur votre image. Voici le morceau de code que j'ai utilisé:
circle.xml
your_layout.xml (Ignorer "android:scaleType="fitXY"" si vous n'en avez pas besoin)
dimen.xml
De Sortie D'Affichage De L'Image:
De l'espoir, Il pourrait être utile à quelqu'un!!! 🙂
vous pouvez utiliser ce code, il va travailler
vous pouvez utiliser ce code, il va travailler
Je recommande d'ajouter
bitmap.recycle()
si vous n'avez pas besoin de plus, ça permettra d'éviter d'erreur OutOfMemory.Pour peaple qui veulent le centre du rectangle (moi), ajouter cette avant de couper:
Android Culture Centre de l'image Bitmap
Basé sur [Jachumbelechao À Mantekilla] réponse, ce code fonctionne comme un charme pour les personnes à la recherche d'un Kotlin solution:
Maintenant, la bonne réponse:
Ici est Kotlin variante à l'aide de la méthode d'extension
Kotin Fucntion
l'appeler par ce code
Je crois que la solution la plus simple est de créer un BitmapShader de votre image Bitmap, de le passer à votre peinture de l'objet et puis il suffit d'appeler quelque chose comme de la toile.drawCircle(cx, cy, de rayon, de la peinture);
par exemple
C'est de cette façon https://github.com/hdodenhof/CircleImageView aussi l'a fait,
vous pouvez lire le code source ici:
https://github.com/hdodenhof/CircleImageView/blob/master/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java
Pas sûr que c'est une question de programmation, mais...
La solution la plus simple serait de faire l'extérieur de la zone transparente dans l'image source. Sinon, vous aurez à calculer les pixels sont à l'extérieur du cercle, et de définir l'alpha en conséquence (alpha = 0 pour la pleine transparence).