Perte de portions d'image avec rotation d'andle quelconque
vboussema
Messages postés138Date d'inscriptionmercredi 1 février 2006StatutMembreDernière intervention 1 septembre 2009
-
7 févr. 2008 à 12:07
vboussema
Messages postés138Date d'inscriptionmercredi 1 février 2006StatutMembreDerniè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;
}
Nikoui
Messages postés794Date d'inscriptionvendredi 24 septembre 2004StatutMembreDernière intervention19 août 200813 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
vboussema
Messages postés138Date d'inscriptionmercredi 1 février 2006StatutMembreDerniè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
vboussema
Messages postés138Date d'inscriptionmercredi 1 février 2006StatutMembreDerniè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