Jeu de BufferedImage masque alpha en Java
J'ai deux BufferedImages je l'ai chargé dans la de png. La première contient une image, la seconde d'un masque alpha de l'image.
Je veux créer une image à partir de les deux, en appliquant le masque alpha. Mon google-fu m'abandonne.
Je sais comment charger/enregistrer les images, j'ai seulement besoin d'un peu où je vais partir deux BufferedImages à un BufferedImage avec le bon canal alpha.
- J'ai édité ma réponse à donner un code correct (à faire ce que vous avez demandé!) d'une autre manière.
Vous devez vous connecter pour publier un commentaire.
Votre solution pourrait être améliorée par l'extraction des données RVB plus d'un pixel à la fois(voir http://java.sun.com/javase/6/docs/api/java/awt/image/BufferedImage.html), et par la création de trois objets de Couleur à chaque itération de la boucle interne.
Je suis en retard de cette réponse, mais peut-être que c'est de l'utiliser pour quelqu'un de toute façon. C'est plus simple et plus efficace de la version de Michael Myers méthode:
Il lit tous les pixels dans un tableau au début, donc ne nécessitant qu'une boucle for. Aussi, il déplace le blue byte à l'alpha (de la couleur du masque), au lieu de la première masquer le rouge octet, puis les déplacer.
Comme les autres méthodes, il suppose que les deux images ont les mêmes dimensions.
J'ai joué récemment un peu avec ce genre de choses, pour afficher une image sur une autre, et à l'évanouissement d'une image en niveaux de gris.
Aussi masquage d'une image avec un masque avec de la transparence (ma précédente version de ce message!).
J'ai pris mon petit programme de test et modifié un peu pour obtenir le résultat voulu.
Voici les bits:
Le reste juste à afficher les images dans un peu de Swing panneau.
Notez que le masque de l'image est en niveaux de gris, noir de devenir une totale transparence, blanc devenant opaque.
Bien que vous avez résolu votre problème, j'ai pensé que je pourrais partager mon prendre sur elle. Il utilise un peu plus de Java-ish méthode, à l'aide de classes standard de filtrer les images.
En fait, ma méthode utilise un peu plus de mémoire (une nouvelle image) et je ne suis pas sûr que c'est plus rapide (pour la mesure de performances pourrait être intéressant), mais il est un peu plus abstrait.
Au moins, vous avez le choix! 🙂
Pour ceux qui sont à l'aide de l'alpha de l'image d'origine.
J'ai écrit ce code dans Koltin, le point clé ici est que si vous avez l'alpha sur votre image d'origine, vous devez multiplier ces canaux.
Koltin Version:
Version de Java (juste traduit de Kotlin)
En fait, j'ai pensé à elle. Ce n'est probablement pas un rapide façon de le faire, mais il fonctionne: