Je suis en train de créer un jeu qui nécessite la rotation d'une image. Pour le faire pivoter, j'utilise le code suivant.Remplace uniquement les coins d'une image pivotée par une couleur différente
public ManipulableImage rotate(double degrees){
BufferedImage rotatedImage = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_RGB);
Graphics2D g = rotatedImage.createGraphics();
g.rotate(Math.toRadians(degrees), image.getWidth()/2, image.getHeight()/2);
/*
ManipulableImage is a custom class that makes it easier to manipulate
an image code wise.
*/
g.drawImage(image, 0, 0, null);
return new ManipulableImage(rotatedImage, true).replace(0, -1);
}
Le code fait pivoter l'image, mais il laisse les coins noirs qui doivent être transparents. Mon moteur de rendu reconnaît la valeur rgb -1 comme valeur transparente et ne modifie pas un pixel lorsque cette valeur est présente. Donc, je voudrais changer les valeurs rgb des coins de 0 (noir) à -1 (transparent). Le seul problème est, je ne peux pas simplement parcourir l'image et remplacer les pixels noirs car il y a d'autres pixels dans l'image originale qui sont noirs. Donc ma question est, comment puis-je remplacer seulement les pixels noirs créés par la rotation.
(. Désolé, je ne pouvais pas donner des exemples de l'image, je ne suis pas sûr de savoir comment capture d'écran avec cet ordinateur)
Vous pouvez essayer de faire un algorithme recherche, donné un point, tous les voisins de la même couleur, puis itérer ces voisins. Comme les coins sont noirs, si vous commencez l'itération dans les quatre coins, il devrait obtenir toutes les 4 zones noires. – ebeneditos
Ce n'est pas parfait non plus, étant donné qu'il pourrait y avoir des pixels noirs sur les bords de l'image. –
A droite, les coins de l'image originale pivotée sur les bords de la nouvelle image? – ebeneditos