IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

rotation d'angle quelconque d'image


Sujet :

Windows Forms

  1. #1
    Membre habitué Avatar de salihovic
    Inscrit en
    Février 2007
    Messages
    255
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 255
    Points : 135
    Points
    135
    Par défaut rotation d'angle quelconque d'image
    salut
    j'ai besoin de faire une rotation pour les images d'un angle différent de 90° et ses multiples
    comment peut-on faire sa???
    je pense qu'il y a la methode scaletransforme m'ai j'ai pas un exemple qui illustre sa

  2. #2
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    salut

    le mieux est pour moi de passer par un objet graphic
    (que tu peux utiliser pour des transformations sur une image

    en utilisant un matrix et les methodes : Translate (pour definir le point de rotation), Rotate (pour rotation via l'angle) et ensuite
    Graphics.Transform (voir en passant par un graphicsPath)

    Apres, t'as plus qu'à faire un DrawImage (apres application de la matrice de transformation) et basta

    et le tour est joué

    The Monz, Toulouse
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  3. #3
    Membre habitué Avatar de salihovic
    Inscrit en
    Février 2007
    Messages
    255
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 255
    Points : 135
    Points
    135
    Par défaut
    bon théoriquement c sa mais pratiquement je sait pas comment faire pratiquement
    as tu un petit exemple une petite source???
    sinon merci pour ton aide

  4. #4
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    beh, tu peux un truc dans ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
                GraphicsPath path = new GraphicsPath();
                Matrix m = new Matrix();
     
                m.Translate(Location.X, Location.Y);
                m.Rotate(angle);
                Bitmap bmp = new Bitmap(@"d:\perso\car.jpg");
                g.Transform = m;
                g.DrawImage(bmp, f);
    Voilo... ou Location.X et Location.Y correspondent à la position de mon objet...
    (je fais une rotation par rapport (de mémoire) à l'angle supérieur Gauche

    The Monz, Toulouse
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  5. #5
    Membre habitué Avatar de salihovic
    Inscrit en
    Février 2007
    Messages
    255
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 255
    Points : 135
    Points
    135
    Par défaut
    merci bien je vai essayer sa

  6. #6
    Membre habitué Avatar de salihovic
    Inscrit en
    Février 2007
    Messages
    255
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 255
    Points : 135
    Points
    135
    Par défaut
    il paret que sa marche pas en fait
    tu déclare GraphicsPath path = new GraphicsPath();
    et puis tu utilise g ???
    aussi il y a un paramètre f !!
    g.DrawImage(bmp, f);
    j'ai pas compris donc si c'est possible reteste sa
    car j'ai pas parvenu a le faire marcher

  7. #7
    Membre habitué Avatar de salihovic
    Inscrit en
    Février 2007
    Messages
    255
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 255
    Points : 135
    Points
    135
    Par défaut
    bon j'ai trouvé un auter code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    private void RotationMenu_Click(object sender, System.EventArgs e)
            {
                Graphics g = this.CreateGraphics();
                g.Clear(this.BackColor);
                Bitmap curBitmap = new Bitmap(@"samplePicture.jpg");
                g.DrawImage(curBitmap, 0, 0, 200, 200);
                // Create a Matrix object, call its Rotate method,
                // and set it as Graphics.Transform
                Matrix X = new Matrix();
                X.Rotate(30);
                g.Transform = X;
                // Draw image
                g.DrawImage(curBitmap,
                new Rectangle(205, 0, 200, 200),
                0, 0, curBitmap.Width,
                curBitmap.Height,
                GraphicsUnit.Pixel);
                // Dispose of objects
                curBitmap.Dispose();
                g.Dispose();
            }
    donc le problème était dans le draw image final il faut bien préciser les bon paramètres en tt cas merci bien theMonz31 car toujours tu m'aide

  8. #8
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    avec plaisir

    en fait, mon code etait "identique" sauf qu'effectivement j'avais oublié de
    préciser que g etait un graphic venant d'un argument et que f etait un rectangle dans lequel s'inscrivait l'image (désolé pour l'oubli)

    On est tous ici présent pour aider les autres et en les aidant, on se pose parfois quelques défis rigolo et attrayant à résoudre

    The Monz, Toulouse
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  9. #9
    Membre habitué Avatar de salihovic
    Inscrit en
    Février 2007
    Messages
    255
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 255
    Points : 135
    Points
    135
    Par défaut
    merci theMonz31
    il paret que j'ai besoin de ton traitement car je veut faire la rotation quelconque de l'image de telles sorte que sa se fait dans un picture box donc il y a un rectangle ou on place l'image et puisque l'image va subir une rotation il faut calculer la nouvelle position et faire une transformation de taille pour l'ajouster au picture box
    il paret que ton code fait sa non???
    si tu peut m'aider plus en me donnant une idé plus précise
    je dis qu'il faut tout d'abors calculer le rectangle dans le quel on va mettre l'image selon l'angle
    car sa dépond de la region de l'angle
    ensuite il faut faire la rotation et bien placé l'image dans le rectangle
    peut etre il correspond a chaque zone de rotation un scale percent
    car de 0->90° l'image est décalé d'une façon
    entre 90->180° il faut faire une translation
    ...

  10. #10
    Membre habitué Avatar de salihovic
    Inscrit en
    Février 2007
    Messages
    255
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 255
    Points : 135
    Points
    135
    Par défaut
    il me paret aussi qu'il faut faire des modifications ou bien agrandir la zone d'image pour dessiner toute l'image sinon cacher les parties qui ne sont pas dans le rectangle et positionner l'image dans la bonne zone
    il est a noter aussi que cette méthode n'écrit pas une image persistante c pour cela que je pense a sauvgarder l'image ranslaté puis la sauvgarder pour enfin la rendre Image de la pictureBox

  11. #11
    Membre habitué Avatar de salihovic
    Inscrit en
    Février 2007
    Messages
    255
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 255
    Points : 135
    Points
    135
    Par défaut
    il y a quelque chose qui cloche
    quand je fait rotate et transforme de graphics l'image se décale non seulement par un angle mais aussi par la position
    il paret aussi que la rotation se fait par rapport au point 0,0 de la forme
    et c'est pourquoi elle n'est pas visible quand on dépasse 90°
    je sai pas quoi faire
    help please

  12. #12
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    Salut

    tu pourrais faire ce code ci

    (pictureBox1 est juste une pictureBox posée sur ma forme...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
                // Création d'une bitmap de la taille de la picture Box...
                Bitmap bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);
                Graphics g = Graphics.FromImage(bmp);
                Matrix m = new Matrix();
                // definition du centre de rotation...
                m.Translate(bmp.Width / 2, bmp.Height / 2);
                m.Rotate(x);
                g.Transform = m;
                // on dessine l'image en la decalant par rapport au centre...
                g.DrawImage(new Bitmap(@"d:\perso\car.jpg"), new Point(-bmp.Width / 2, -bmp.Height / 2));
                pictureBox1.Image = bmp;
    The Monz, Toulouse
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  13. #13
    Membre habitué Avatar de salihovic
    Inscrit en
    Février 2007
    Messages
    255
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 255
    Points : 135
    Points
    135
    Par défaut
    merci sa marche mais il contient des erreurs il paret mais c mieu en tt cas
    j'ai trouvé une source excellente :
    http://blog.paranoidferret.com/index...diting-rotate/
    il etudi différents aspets de traimtement d'image (rotation resize ...)
    c'est excellent
    je ne sait pas pourquoi je ne trouve pas sa dès le début???

  14. #14
    Membre habitué Avatar de salihovic
    Inscrit en
    Février 2007
    Messages
    255
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 255
    Points : 135
    Points
    135
    Par défaut
    j'ai compris la différence
    ce qu'il fait lui dans ce code c'est récupérer l'image puis la faire rotationner
    en suite il l'affecte à la pictureBox en modifiant le size mode
    c le même code d'ailler
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    private Bitmap rotateImage(Bitmap b, float angle)
    {
      //create a new empty bitmap to hold rotated image
      Bitmap returnBitmap = new Bitmap(b.Width, b.Height);
      //make a graphics object from the empty bitmap
      Graphics g = Graphics.FromImage(returnBitmap);
      //move rotation point to center of image
      g.TranslateTransform((float)b.Width/2, (float)b.Height / 2);
      //rotate
      g.RotateTransform(angle);
      //move image back
      g.TranslateTransform(-(float)b.Width/2,-(float)b.Height / 2);
      //draw passed in image onto graphics object
      g.DrawImage(b, new Point(0, 0));
      return returnBitmap;
    }
    merci donc une autre foi

  15. #15
    Membre habitué Avatar de salihovic
    Inscrit en
    Février 2007
    Messages
    255
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 255
    Points : 135
    Points
    135
    Par défaut
    il me reste un problème c'est les coins qui disparesses car en effectuant une rotation l'image décalé
    il faut redimentionner l'image et puis l'aggrandir une autre foi
    j'ai essayer un scale de 0.5 les coins ne disparesses plus mais le problème que l'image devient plus petite et je ne sait pas comment la redimentionner dans le pictureBox

  16. #16
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    salut

    si tu veux , tu peux prendre le mode SizeMode normal dans ta pictureBox..

    Apres, tu te geres la taille de ton image à la main

    The Monz, Toulouse
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  17. #17
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    587
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Octobre 2006
    Messages : 587
    Points : 706
    Points
    706
    Par défaut
    Bonjour,

    Pour la rotation de ton image tu peux utiliser la méthode RotateFlip de ton Bitmap mais les posibilités sont limitées car le paramètre d ela méthode est une énumération :/

    Citation Envoyé par salihovic Voir le message
    j'ai essayer un scale de 0.5 les coins ne disparesses plus mais le problème que l'image devient plus petite et je ne sait pas comment la redimentionner dans le pictureBox
    Si tu as des problèmes de redimensionnement tu peux utiliser les valeurs Zoom ou Stretch de la propriété ResizeMode de la pictureBox.

  18. #18
    Membre habitué Avatar de salihovic
    Inscrit en
    Février 2007
    Messages
    255
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 255
    Points : 135
    Points
    135
    Par défaut
    le problème persiste mais je vais voir sa c'est sure qu'en changeant le mode d'affichage sa va changer mais aussi il faut modifier aussi la taille de l'image retourné après rotation. donc c'est ça le problème mais je pense que c'est pas trop difficile merci en tout cas

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Rotation et flip d'une image
    Par aDamas dans le forum 2D
    Réponses: 10
    Dernier message: 06/01/2011, 11h20
  2. Arrondir Les angles d'une image
    Par Flopp dans le forum C#
    Réponses: 11
    Dernier message: 21/05/2009, 10h40
  3. Réponses: 4
    Dernier message: 12/09/2008, 14h30
  4. [Canvas] Rotation d'un rectangle ou image
    Par airod dans le forum Tkinter
    Réponses: 1
    Dernier message: 03/10/2007, 19h59
  5. Correction de rotation(en Z) dans une image 2D
    Par syn_42 dans le forum Développement 2D, 3D et Jeux
    Réponses: 3
    Dernier message: 05/04/2006, 15h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo