Algo - pivoter une image

Résolu/Fermé
Étienne9 Messages postés 1022 Date d'inscription mardi 1 mars 2011 Statut Membre Dernière intervention 10 mai 2015 - Modifié par Étienne9 le 25/02/2012 à 09:07
Étienne9 Messages postés 1022 Date d'inscription mardi 1 mars 2011 Statut Membre Dernière intervention 10 mai 2015 - 8 mars 2012 à 20:35
Bonjour tout le monde.

Alors voilà, j'ai expliqué mon problème sur cette vidéo qui sera plus tard effacée :
https://www.youtube.com/watch?v=g0tt_cScxB4&feature=player_embedded

Quelqu'un pourrait m'aider s'il vous plaît ? Ça fait trois jours que je cherche une relation entre l'image d'origine et une image pivoté d'un angle alpha.

Merci beaucoup d'avance :)

A voir également:

4 réponses

Bonjour,

Ton problème consiste à transformer des coordonnées cartésiennes en coordonnées polaires et inversement.

http://fr.wikipedia.org/wiki/Coordonn%C3%A9es_polaires

Suivant les languages, il existe des fonctions trigo toutes faites pour ça.
Sinon, faut les programmer toi-même. Mais c'est tout à fait possible.

Les coordonnées seront des valeurs réèlles (et non entières).

;)
0
Étienne9 Messages postés 1022 Date d'inscription mardi 1 mars 2011 Statut Membre Dernière intervention 10 mai 2015 49
25 févr. 2012 à 21:14
Bonjour,

Je vais faire cela en Java.
0
Étienne9 Messages postés 1022 Date d'inscription mardi 1 mars 2011 Statut Membre Dernière intervention 10 mai 2015 49
Modifié par Étienne9 le 8/03/2012 à 00:24
J'ai fait une fonction en Java là qui prend en paramètre un angle en degré mais la fonction ne fonctionne pas.

public static void rotation(int angle)
{
int l=0,h=0,l2=0,h2=0,i=0,j=0,pix=0,phd=0,pbd=0;
BufferedImage im=null,imro=null;
try {
im = ImageIO.read(new File("./image.bmp"));
}
catch (Exception e) {}
l = im.getWidth();
h = im.getHeight();
phd = (int) (Math.abs((l-1)*Math.cos(angle*Math.PI/180)));
pbd = (int) (Math.abs((l-1)*Math.sin(angle*Math.PI/180) + (h-1)*Math.cos(angle*Math.PI/180)));
imro = new BufferedImage(phd,pbd,BufferedImage.TYPE_INT_RGB);
for (j=0;j<l;j++) {
for (i=0;i<h;i++) {
pix = im.getRGB(i,j);
imro.setRGB(Math.abs((int) (i*Math.cos(angle*Math.PI/180)-j*Math.sin(angle*Math.PI/180))),Math.abs((int)(i*Math.sin(angle*Math.PI/180) + j*Math.cos(angle*Math.PI/180))),pix);
}
}
try {
ImageIO.write(imro,"png",new File("rotation.png"));
}
catch (Exception e) {};
}


Pouvez-vous me trouvez mes erreurs s'il vous plaît car je ne trouve pas.

Informations : PHD pour pixel en haut à droite et PBD pour pixel en bas à droite.

Merci beaucoup.
0
Étienne9 Messages postés 1022 Date d'inscription mardi 1 mars 2011 Statut Membre Dernière intervention 10 mai 2015 49
8 mars 2012 à 16:34
J'ai inversé un h et un l, maintenant ça ne fonctionne qu'à condition que je définisse moi même l'image de départ.
Pouvez-vous m'aider à définir la taille de la nouvelle image s'il vous plaît ?

De plus, j'ai fait une autre fonction récursive qui s'occupe de 90, 180 et 270° mais seul le 90° fonctionne.

public static void rotation90(int nb, BufferedImage im)
{
int l=0,h=0,i=0,j=0,pix=0;
BufferedImage imro;
l = im.getWidth();
h = im.getHeight();
imro = new BufferedImage(h,l,BufferedImage.TYPE_INT_RGB);
for (j=0;j<h;j++) {
for (i=0;i<l;i++) {
pix = im.getRGB(i,j);
imro.setRGB(h-j-1,l-i-1,pix);
}
}
if (nb == 1) {
try {
ImageIO.write(imro,"png",new File("rotation.png"));
}
catch (Exception e) {};
}
else {
if(nb == 2) {
rotation90(1,imro);
}
else {
rotation90(2,imro);
}
}
}


Pouvez-vous m'aider s'il vous plaît ?
0
Étienne9 Messages postés 1022 Date d'inscription mardi 1 mars 2011 Statut Membre Dernière intervention 10 mai 2015 49
8 mars 2012 à 20:35
Je vais poster tout ça ailleurs sur ce forum ça sera mieux.
0