Rotation de l'Image avec AffineTransform
J'ai la classe appelée Airplane
. À l'intérieur de cette classe, j'ai eu la variable img
qui est un BufferedImage
type. Qu'est-ce que plus j'ai de la classe WorldMap
qui remplace la fonction paintComponent(Graphics g)
:
@Override
public void paintComponent(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
g2d.drawImage(mapa, 0, 0, getWidth(), getHeight(), null);
drawAirplanes(g2d);
}
Fonction drawAirplanes()
ressembler à ceci:
private void drawAirplane(Graphics2D g){
for(Samolot i: s){
i.rotateAirplane();
g.drawImage(i.getImg(),i.getX(),i.getY(),(int)i.getDim().getWidth(),(int)i.getDim().getHeight(), null);
}
}
Il suffit de 1) faire tourner l'avion (BufferedImage à l'intérieur de l'Avion objet) 2) tracer lui.
Mon Avion.rotateAirplane() la fonction ressemble à ceci:
public void rotateSamolot() {
AffineTransform tx = new AffineTransform();
tx.translate(10,10); //10, 10 is height and width of img divide by 2
tx.rotate(Math.PI / 2);
tx.translate(-10,-10);
AffineTransformOp op = new AffineTransformOp(tx, AffineTransformOp.TYPE_BILINEAR);
BufferedImage newImage =new BufferedImage(20, 20, img.getType()); //20, 20 is a height and width of img ofc
op.filter(img, newImage);
this.img = newImage;
}
ofc quand im l'exécution de mon programme mapa
objet est dessiné. quand im la suppression de cette voie
this.img = newImage;
j'ai eu l'ofc mon avion aussi, mais pas en rotation.
Je ne suis pas sûr que vous voulez traduire le AffineTransform, vous devez, au lieu de cela, l'approvisionnement de la rotation des points avec la rotation de la méthode, qui est en général le centre point, mais c'est à vous de voir. Je voudrais également de ne pas affecter le résultat de la rotation arrière pour le maître de l'image sinon vous en aggravant la rotation....
Je "pense" fondamentalement, ce qui est arriver, c'est votre image est pivotée "hors limites" de l'espace disponible...
Vous pouvez prendre un coup d'oeil à cet exemple
j'ai oublié d'enregistrer un original de l'image - c'est vrai. mais ne comprennent pas encore comment je peux corriger mon code pour ne pas le tourner en dehors des limites de mon espace. des idées? l'ofc je vais jeter un oeil sur ce lien, en quelques sec
15 questions posées. Pas une seule réponse acceptée. Manifestement, vous n'avez pas apprécié l'aide que vous obtenez sur les questions, donc je pense que je vais sauter cette.
Je "pense" fondamentalement, ce qui est arriver, c'est votre image est pivotée "hors limites" de l'espace disponible...
Vous pouvez prendre un coup d'oeil à cet exemple
j'ai oublié d'enregistrer un original de l'image - c'est vrai. mais ne comprennent pas encore comment je peux corriger mon code pour ne pas le tourner en dehors des limites de mon espace. des idées? l'ofc je vais jeter un oeil sur ce lien, en quelques sec
15 questions posées. Pas une seule réponse acceptée. Manifestement, vous n'avez pas apprécié l'aide que vous obtenez sur les questions, donc je pense que je vais sauter cette.
OriginalL'auteur fa1thly | 2013-11-28
Vous devez vous connecter pour publier un commentaire.
Le problème majeur (que je vois) est la traduction de la
Graphics
contexte qui est le décalage de la position de la rotation aura lieu.Je "pense" rotation par défaut se produit en haut/gauche de la
Graphics
contexte (où il est 0x0 position est, qui vous ai traduit en quelque chose d'autre), ce qui pourrait être à l'origine de l'image à faire pivoter hors du cadre (ou de la zone affichable)Vous devez fournir un "point d'ancrage" point où la rotation a lieu, en général, le centre est ma préférence personnelle.
L'exemple suivant a simplement un maître de l'image (en raison de contraintes de taille, j'ai eu de l'échelle, mais vous ne pouvez pas besoin de cela). Je puis l'utiliser pour générer une "rotation" de l'instance qui est dimensionné pour permettre l'image pour l'adapter à l'intérieur. Ce est beaucoup de plaisir avec trig - j'ai volé le code à partir de quelque part, si le crédit que développeur.
L'exemple vous permet de cliquer n'importe où et il va changer le pivot de rotation, de sorte que vous pouvez voir ce qu'il se passe. La position par défaut est le centre de la fenêtre...
OriginalL'auteur MadProgrammer
C'est ce qui a fonctionné pour moi (un peu de la copie à partir d'ici et de là-bas):
OriginalL'auteur Atreide