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
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
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)
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
beh, tu peux un truc dans ce genre :
Voilo... ou Location.X et Location.Y correspondent à la position de mon objet...
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);
(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)
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
bon j'ai trouvé un auter code
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
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(); }
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)
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
...
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
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
Salut
tu pourrais faire ce code ci
(pictureBox1 est juste une pictureBox posée sur ma forme...)
The Monz, Toulouse
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
Expertise dans la logistique et le développement pour
plateforme .Net (Windows, Windows CE, Android)
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???
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
merci donc une autre foi
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; }
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
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)
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 :/
Si tu as des problèmes de redimensionnement tu peux utiliser les valeurs Zoom ou Stretch de la propriété ResizeMode de la pictureBox.
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
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager