begin process at 2008 07 25 18:16:17
1 216 413 membres
372 nouveaux aujourd'hui
14 181 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : rotation d'image. probleme avec graphics [ Multimédia / Image et Vidéo ] (Vincent)

rotation d'image. probleme avec graphics le 29/04/2008 14:47:04

Vincent
Bonjour à tous,

mon objectif est de pouvoir "cadrer" une image provenant d'un scan. Celle ci serait un peu penchée et ne serait pas conforme pour un traitement futur. Afin de cadrer l'image chargée dans un picturebox, j'aimerais que l'utilisateur puisse cliquer sur deux points apparaissant sur l'image définissant la diagonale. A partir de ces deux points, le programme doit pouvoir faire pivoter l'image afin de la cadrer.


Pour faire pivoter l'image, j'ai créé cette classe qui utilise la méthode rotationflip de graphics, malheureusement le traitement semble sans effet chez moi.
Ici  p1 et p2  représentent les points sur  lesquelles l'utilisateur aurait  cliqué, et nouveaup1 et nouveaup2 sont la nouvelle position souhaitée de ces points. La méthode pour calculer l'angle de rotation est basée sur les produits scalaires et le problème ne vient à priori pas d'elle mais plutôt du fait que je ne sais pas bien manipuler les graphics.
Le soucis principal est que le bitmap renvoyé est le même que Image passée dans le constructeur, sans qu'un rotation ne semble avoir été effectuée.

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Text;

namespace ImageRotation
{
    public class ImageRotation
    {
        private Bitmap image;
        private Point p1;
        private Point p2;
        private Point nouveaup1;
        private Point nouveaup2;
        int nouvelleLargeur;
        int nouvelleHauteur;

        public ImageRotation(Bitmap image, Point p1, Point p2, Point nouveaup1, Point nouveaup2, int nouvelleLargeur, int nouvelleHauteur)
        {

            this.image = image;
            this.p1 = p1;
            this.p1 = p2;
            this.nouveaup1 = nouveaup1;
            this.nouveaup2 = nouveaup2;
            this.nouvelleHauteur = nouvelleHauteur;
            this.nouvelleLargeur = nouvelleLargeur;
        }

        public Image traitement()
        {
            Graphics g = Graphics.FromImage(image);
            Point v1 = new Point(p2.X - p1.X, p2.Y - p1.Y);
            Point v2 = new Point(nouveaup2.X - nouveaup1.X, nouveaup2.Y - nouveaup1.Y);

            double cosAngle = (v1.X * v2.X + v1.Y * v2.Y)  / ((Math.Sqrt(v1.X * v1.X + v1.Y * v1.Y) *  (Math.Sqrt(v2.X * v2.X + v2.Y * v2.Y))));
            System.Windows.Forms.MessageBox.Show("cosangle" + cosAngle.ToString());
            double angle = Math.Acos(cosAngle)* (180/Math.PI) ;
            System.Windows.Forms.MessageBox.Show("angle" + angle.ToString());
            g.RotateTransform((float)angle);
            System.Windows.Forms.MessageBox.Show("j'ai soit disant tourné");
            return new Bitmap(1000, 1000, g);
        }
    }
}



D'avance, merci pour votre aide.


Classé sous : system, image, p1, nouveaup1, nouveaup2

Participer à cet échange

Pub



Appels d'offres

Animation Flash alimen...
Budget : 6 000€
Creation portail video
Budget : 3 000€
Site de e-commerce
Budget : 5 000€

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS