CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[Java] Rotation en AffineTransform.

dxtreme01
dxtreme01
Niveau 7
02 février 2014 à 17:49:26

Bonsoir, :hap:
Pour un programme que je code actuellement j'ai besoin d'effectuer une rotation sur une image.(Une tile carré)
On m'a dit que je pouvais utiliser la fonction rotate() de AffineTransform,.. C'est ce que j'ai fait, sauf qu'un nouveau problème s'ouvre à moi. :honte: Mon résultat est comme "rognée" :
https://image.noelshack.com/fichiers/2014/05/1391359329-capturer.jpg
Je pense que ça vient du fait que largeur ainsi que la hauteur de mon image augmente à cause de la rotation(Ce qui est logique)... Et donc je cherche un moyen de régler ce problème pour que mon image finale ne soit pas "coupé" (Je suis sûre qu'il y à moyen :noel: ),... Si vous avez des solutions, n’hésitez pas! :cute: Je vous remercie d'avance! :ange:

PS: Voila le code source de ma méthode en question si ça peut aider:
http://pastebin.com/jF7xdACY

J'attend vos réponses avec impatience! :-) Sur ce, Bonne fin de soirée! :ok:

godrik
godrik
Niveau 30
02 février 2014 à 18:05:12

Il faut faire ta rotation vers un buffer plus grand, si ta tile est de cote c, alors il va te falloir un buffer de taille sqrt(2)*c. Il faut aussi certainement faire en sorte que le "blanc" de ton image soit en fait du transparent.

dxtreme01
dxtreme01
Niveau 7
02 février 2014 à 18:25:53

Salut, tout d'abord merci de ta réponse, :-)
--------------------------------------------
"Il faut aussi certainement faire en sorte que le "blanc" de ton image soit en fait du transparent."
--------------------------------------------
Mon image est déjà dépourvue de blanc ^^
https://image.noelshack.com/fichiers/2014/05/1391361173-capturer.jpg
En faite c'est un carré à la base, à qui j’effectue une rotation grâce au AffineTransform.rotate();
--------------------------------------------
Il faut faire ta rotation vers un buffer plus grand, si ta tile est de cote c, alors il va te falloir un buffer de taille sqrt(2)*c.
--------------------------------------------
Oui je vois ou tu veut en venir, mais je ne visualise toujour pas du tout la démarche pour y parvenir :snif: Ça fait déjà plusieurs heures que je cherche la solution sur le net, mais je ne trouve pas exactement ce que je cherche..
Ce que j'essaye de faire c'est cela:
https://image.noelshack.com/fichiers/2014/05/1391337204-tiletransf2.png

Mais avant de faire "l’aplatissement" il faudrait que je règle ce soucis d'image "rogné" :diable:

Bref, si quelqu'un à déjà eu ce soucis, et qu'il à la solution, ça me ferrais plaisir qu'il partage sa solution :ange: .. Bye

godrik
godrik
Niveau 30
02 février 2014 à 18:33:02

pour passer de 1 a deux, tu creer une image plus grande de taille sqrt(2)c. tu copies l'image de 1 au milieu de l'image de nouvellement cree. Et ensuite tu fais ta rotation.

Pour passer de 2 a 3, il suffit de redimensionner l'image en x et en y. Comme ton l'angle forme par les diagonales interieur de ton carre est droite et aligne sur les axes x et y, apres redimensionnement, cet angle va rester droit. Et donc tu obtiendras un losange.

Une question, pourquoi est ce que tu fais ca en java? Ne serait il pas mieux de faire ca en amont du jeu et de stocker deja "isometrise"?

dxtreme01
dxtreme01
Niveau 7
02 février 2014 à 20:28:23

Owh.. :ouch: Merci mec!! C'est exactement ça!! Comment j'ai fait pour ne pas y penser plus tôt! :bave:
Maintenant que j'y repense c'est hyper bête comme solution j’aurais du y penser plus tôt..
--------------------------------------------
Une question, pourquoi est ce que tu fais ça en java? Ne serait il pas mieux de faire çà en amont du jeu et de stocker déjà "isométrisé"?
--------------------------------------------
Bah au début j'était partit pour des graphiques full 2D carré, et ce n'est que maintenant que j'ai voulut m'orienter plutôt vers de la 2D Isométrique. Et comme j'avais déjà un Sprites Sheets de textures, j'ai préférer modifier mon SpritesSheetLoader pour qu'au lui de ma retourner des images carré, qu'il me retourne des images en 2D Iso :)

Bref, encore merci pour ta solution! :ange: Fallait vraiment y penser. :noel:
Allez A+ :-)))

godrik
godrik
Niveau 30
02 février 2014 à 20:43:05

pas de soucis. Tiens nous au courant de tes progres.

dxtreme01
dxtreme01
Niveau 7
02 février 2014 à 22:16:20

Re-Salut!(Je sait je dois un peut vous embêter avec mes problèmes) :hap:

J'ai fait ce que tu m'a dit:
http://pastebin.com/vwUjC7TZ
(Le premier bloc de commentaire c'est mon ancien code)
(Le deuxième bloc de commentaire c'est ton message)
(Le troisième bloc de commentaire c'est une petite synthèse que j'ai faite pour mieux comprendre le procéder que tu m'a donner dans ton commentaire)

Alors comme on peut le voir tout en dessous dans ma méthode j'ai réussit à créer l'image à la bonne taille en utilisant la formule que tu m'a conseiller et donc il me manque plus qu'a "copier l'image d'origine au milieu de l'image redimensionner"

Et donc j'aimerais savoir comment faire pour copier une BufferedImage dans une autres BufferedImage

J'ai rapidement regarder les méthodes de ma BufferedImage et j'ai pas trouvé quelque chose qui ressembler a un "fusionnerImage" ou "AjouterImage",... Voila, après ça promit je fait un effort pour trouver le reste tout seul! Ce serras "normalement" mon dernier problème :ange:

https://image.noelshack.com/fichiers/2014/05/1391375404-capturer.jpg
Sur le screen, on peut voir à droite l'image de base et à gauche la zone dans laquelle elle doit apparaître en 2D Iso :-) (ps: c'est fait exprès qu'elle soit en noir, c'est pour la voir, quand ce serras bon, elle serras transparente)

Encore merci à toi de prendre le temps de lire et de répondre à mes messages! Respect! :cute:

dxtreme01
dxtreme01
Niveau 7
02 février 2014 à 23:20:42

:up: de 23 heures passé :ok:

godrik
godrik
Niveau 30
02 février 2014 à 23:58:49

C'est cool que tu arrives a faire tes tiles.

Reviens nous parler de ton projet!

dxtreme01
dxtreme01
Niveau 7
05 février 2014 à 15:08:52

Problème résolut, :cool: pour ceux qui voudrais la solution:

---------------------------
private static BufferedImage convertTo2Diso(BufferedImage image2D, double radian) {

BufferedImage image2DiIso = new BufferedImage((int) (Math.sqrt(2) * image2D.getWidth()), (int) (Math.sqrt(2) * image2D.getHeight()), BufferedImage.TYPE_INT_ARGB);
AffineTransform affineTransform = new AffineTransform();
Graphics2D outgrap = (Graphics2D) image2DiIso.getGraphics();

affineTransform.translate(image2DiIso.getWidth()

/ 2, 0);
affineTransform.rotate(radian, 0, 0);

outgrap.setTransform(affineTransform);
outgrap.drawImage(image2D, 0, 0, null);

return image2DiIso;
}
---------------------------

Sous forums
  • Aide à l'achat Mac
  • Internet
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment