Algo - pivoter une image

Résolu
Étienne9 Messages postés 1022 Date d'inscription   Statut Membre Dernière intervention   -  
Étienne9 Messages postés 1022 Date d'inscription   Statut Membre Dernière intervention   -
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

Yoda
 
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   Statut Membre Dernière intervention   49
 
Bonjour,

Je vais faire cela en Java.
0
Étienne9 Messages postés 1022 Date d'inscription   Statut Membre Dernière intervention   49
 
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   Statut Membre Dernière intervention   49
 
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   Statut Membre Dernière intervention   49
 
Je vais poster tout ça ailleurs sur ce forum ça sera mieux.
0