Perte de portions d'image avec rotation d'andle quelconque

vboussema Messages postés 138 Date d'inscription mercredi 1 février 2006 Statut Membre Dernière intervention 1 septembre 2009 - 7 févr. 2008 à 12:07
vboussema Messages postés 138 Date d'inscription mercredi 1 février 2006 Statut Membre Dernière intervention 1 septembre 2009 - 7 févr. 2008 à 13:01
salut;
quand je fait une rotation d'un angle quelconque pour une image je pert les coins de telle serte que l'image se découpe a chaque foi que je fait la rotation
y a t-il une solution pour ça???

le code pour rotation:

private Bitmap rotateImage(Bitmap b, float angle)
        {
            //create a new empty bitmap to hold rotated image
            int max = Math.Max(b.Height, b.Width);
            Bitmap returnBitmap = new Bitmap(max,max);
            //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;
        }

et merci ;)
//as you like

3 réponses

Nikoui Messages postés 794 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 19 août 2008 13
7 févr. 2008 à 12:11
Il faut que tu calcules la taille du rectangle destination (sachant que la taille max de ce rectangle est égal à la diagonale du rectangle source). Il faut aussi "décaler la destination" vers le centre du rectangle destination.

<hr size="2" width="100%" />
Working as designed
www.nikoui.fr
0
vboussema Messages postés 138 Date d'inscription mercredi 1 février 2006 Statut Membre Dernière intervention 1 septembre 2009
7 févr. 2008 à 12:16
peut tu corriger mon code pour que je comprend car déja le code contient une translation et j'ai essayer de faire un scal mais le resultat n'était pas bon
la première chose que je faisais c'est calculer le max entre le height et le widht puis deviser ceci sur la moitié de la diagonale
ensuite calculer le facteur de scale qui est la max sur la moitié de la diagonale
mais c'est encore flou
j'ai essaiyé aussi de redimentioner avec un scale de 0.75 de largeur et heuteur et sa marche mais l'image devien petite

//as you like
0
vboussema Messages postés 138 Date d'inscription mercredi 1 février 2006 Statut Membre Dernière intervention 1 septembre 2009
7 févr. 2008 à 13:01
si tu teste ma source elle marche
ceci est le code modifié avec le scale

 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);
            //pour le redimentionnement

            //move rotation point to center of image
            g.TranslateTransform((float)(b.Width * (0.5)), (float)(b.Height * (0.5)));
            //rotate
            g.RotateTransform(angle);
            //redimentionner
            g.ScaleTransform(0.5f, 0.5f);
            //move image back
            g.TranslateTransform(-(float)((b.Width * (0.5))), -(float)((b.Height * (0.5))));
            //draw passed in image onto graphics object
            g.DrawImage(b, new Point(0, 0));
            return returnBitmap;
        }
le problème c'est comment redimentionner l'image après recupération
car cette méthode retourne une image que j'affecte à Image de la pictureBox
a priori il faut faire des traitements pour acquérir cette image et l'agrandir avant de la mettre dans le pictureBox

//as you like
0
Rejoignez-nous