[c#] Redimensionner une image à l'aide de la souris [Résolu]

cs_Ninounette 18 Messages postés jeudi 22 septembre 2005Date d'inscription 26 avril 2006 Dernière intervention - 30 janv. 2006 à 11:51 - Dernière réponse : projetf 26 Messages postés dimanche 15 avril 2007Date d'inscription 27 avril 2009 Dernière intervention
- 1 mai 2007 à 13:37
Bonjour à tous!



Le titre n'est peut-être pas très parlant mais je vous explique: je
dispose d'un panel dans lequel se trouve une picturebox. Dans celle-ci,
je charge une image que je dois ensuite redimensionner selon les
critères du user.



Jusque là, pas de problèmes. Le soucis est que le redimensionnement se
fait au moyen de la souris; le user clique sur l'image (qui est dans la
picturebox) et créer un rectangle de la grandeur qu'il veut. Suite à
cela, mon programme détermine les grandeurs du rectangle et
redimensionne mon image aux dimensions du rectangle.



Actuellement, je tente de dessiner un bête rectangle sur mon image,
dans ma picturebox mais ca ne fonctionne pas. En effet, le rectangle se
dessine parfaitement sur la form mais pas sur le composant picturebox.



Je peine donc un peu et je m'y perd. Est-ce possible de faire ce que je
souhaite avec les coposants que j'utilise? Si oui, comment faire
apparaître mon rectangle carrément dans ma picturebox? un petit coup de
pouce serait le bienvenu siouplaît :)
Afficher la suite 

Votre réponse

10 réponses

Meilleure réponse
Lutinore 3248 Messages postés lundi 25 avril 2005Date d'inscription 27 octobre 2012 Dernière intervention - 6 févr. 2006 à 11:36
3
Merci
Il faut créer une instance de MyPictureBox et non plus de PictureBox, mais peu importe car Coq à montré précédemment qu'on pouvait utiliser la méthode ControlPaint.DrawReversibleFrame pour dessiner une séléction par dessus les contrôles, je pense que ça va convenir pour ce que tu veux faire :

public partial class Form1 : Form
{
private bool down;
private Point start;
private Rectangle selection;


public Form1( )
{
InitializeComponent( );


PictureBox pb = new PictureBox( );
pb.Location = new Point( 0, 0 );
pb.Size = new Size( 200, 200 );
pb.Image = Image.FromFile( "Miss.jpg" );
pb.SizeMode = PictureBoxSizeMode.StretchImage;
pb.MouseDown += new MouseEventHandler( PictureBox_MouseDown );
pb.MouseMove += new MouseEventHandler( PictureBox_MouseMove );
pb.MouseUp += new MouseEventHandler( PictureBox_MouseUp );


this.Controls.Add( pb );
}


private void PictureBox_MouseDown( object sender, MouseEventArgs e )
{
if ( e.Button == MouseButtons.Left )
{
down = true;
selection = Rectangle.Empty;
start = this.PointToScreen( new Point( e.X, e.Y ) );
}
}


private void PictureBox_MouseMove( object sender, MouseEventArgs e )
{
if ( down )
{
ControlPaint.DrawReversibleFrame( selection, this.BackColor, FrameStyle.Dashed );


Point end = this.PointToScreen( new Point( e.X, e.Y ) );
selection = new Rectangle( start.X, start.Y, end.X - start.X, end.Y - start.Y );

ControlPaint.DrawReversibleFrame( selection, this.BackColor, FrameStyle.Dashed );
}
}


private void PictureBox_MouseUp( object sender, MouseEventArgs e )
{
if ( down )
{
ControlPaint.DrawReversibleFrame( selection, this.BackColor, FrameStyle.Dashed );
down = false;
}
}
}

Merci Coq

Merci Lutinore 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de Lutinore
Equinox84 63 Messages postés lundi 2 février 2004Date d'inscription 19 mai 2010 Dernière intervention - 30 janv. 2006 à 12:03
0
Merci
Je ne crois pas que tu puisses manipuler ton image dans un picturebox,
tu devrais plutot la mettre dans un userControl , tu la dessine dans un
Graphics que tu peux manipuler (taille de l'image, si tu veux la
sauvegarder dans un autre format, taille ...)
Commenter la réponse de Equinox84
cs_Ninounette 18 Messages postés jeudi 22 septembre 2005Date d'inscription 26 avril 2006 Dernière intervention - 30 janv. 2006 à 12:15
0
Merci
Le problème alors est que le reste de mon programme se base sur cette
picturebox. Cest-à-dire qu'il y a une autre méthode de
redimensionnement (à l'aide de textbox). En fait, tout ce que je veux,
c'est améliorer mon programme en rajoutant une fonctionnalité
intéressante.
Commenter la réponse de cs_Ninounette
sebmafate 4947 Messages postés lundi 17 février 2003Date d'inscription 14 février 2014 Dernière intervention - 30 janv. 2006 à 12:34
0
Merci
ce que tu peux faire, c'est mettre la propriété SizeMode du picturebox à Strech et en redimensionnant ton picturebox, ton image suivra

Sébastien FERRAND
[MVP Visual C#]
Commenter la réponse de sebmafate
cs_Ninounette 18 Messages postés jeudi 22 septembre 2005Date d'inscription 26 avril 2006 Dernière intervention - 30 janv. 2006 à 13:35
0
Merci
L'idée n'est pas mauvaise mais pour mon cas, je dimensionne justement
ma picturebox à la taille de l'image(ce qui affiche ensuite les scroll
bar de mon panel).



Je suis un peu novice... ca consiste en quoi un "userControl"? J'ai un
peu lu dans la doc seulement me concernant, je ne vois pas trop comment
l'utiliser.
Commenter la réponse de cs_Ninounette
Lutinore 3248 Messages postés lundi 25 avril 2005Date d'inscription 27 octobre 2012 Dernière intervention - 30 janv. 2006 à 16:09
0
Merci
Salut, dis moi si ce code te convient , il te suffit de remplacer ta PictureBox par celle-ci :

public class MyPictureBox : PictureBox
{
private bool down = false;
private Pen pen = null;
private int x = 0;
private int y = 0;
private int w = 0;
private int h = 0;


public MyPictureBox( )
{
this.SetStyle
(
ControlStyles.UserPaint |
ControlStyles.AllPaintingInWmPaint |
ControlStyles.DoubleBuffer,
true
);


pen = new Pen( Color.Black );
pen.DashStyle = DashStyle.Dash;
}


protected override void OnMouseDown( MouseEventArgs e )
{
// base.OnMouseDown( e );


x = e.X;
y = e.Y;
down = true;
}


protected override void OnMouseUp( MouseEventArgs e )
{
// base.OnMouseUp( e );


down = false;
Invalidate( this.ClientRectangle ); // Efface la séléction.
}


protected override void OnMouseMove( MouseEventArgs e )
{
// base.OnMouseMove( e );


if ( down )
{
w = e.X - x;
h = e.Y - y;
Invalidate( this.ClientRectangle ); // Dessine la séléction.
}
}


protected override void OnPaint( PaintEventArgs e )
{
base.OnPaint( e );


Graphics g = e.Graphics;


if ( down )
{
g.DrawRectangle( pen, x, y, w, h );
}
}
}
Commenter la réponse de Lutinore
cs_Ninounette 18 Messages postés jeudi 22 septembre 2005Date d'inscription 26 avril 2006 Dernière intervention - 31 janv. 2006 à 20:40
0
Merci
Une lueur dans le brouillard...



Je te remercie... je vais tester ça dans la semaine et vous redonnerai des nouvelles.
Commenter la réponse de cs_Ninounette
cs_Ninounette 18 Messages postés jeudi 22 septembre 2005Date d'inscription 26 avril 2006 Dernière intervention - 6 févr. 2006 à 08:50
0
Merci
Voici mon programme actuel (sans remplacement de la picture box).



private void bt_Click(object sender, System.EventArgs e)

{

this.search_file.ShowDialog();

if (this.search_file.FileName != "")

{

picture = new Redim(this.search_file.FileName);

this.PBenfant.Height = picture.GetHeightPix();

this.PBenfant.Width = picture.GetWidthPix();

}

temp = picture.GetCopie();

ShowPicture();

}



private void ShowPicture()

{

if (this.picture != null && this.picture.flag)

{

this.PBenfant.Image = picture.GetImage();




if(PBenfant.Height > p.Height || PBenfant.Width
> p.Width)

{

p.AutoScroll = true;


p.AutoScrollMinSize =
PBenfant.Size;


PBenfant.SizeMode =
PictureBoxSizeMode.StretchImage;

}

}

}



Je tente de remplacer PBenfant seulement, lorsque j'arrive dans la
fonction ShowPicture(), ma nouvelle pictureBox n'est pas reconnue donc
je ne peux même pas mettre mon image dedans (et l'afficher)... J'ai
loupé qqch?
Commenter la réponse de cs_Ninounette
cs_Ninounette 18 Messages postés jeudi 22 septembre 2005Date d'inscription 26 avril 2006 Dernière intervention - 9 févr. 2006 à 09:27
0
Merci
Merci beaucoup!



Le code fonctionne, j'ai bien un rectangle qui se dessine. Il me manque
plus qu'à prendre les dimensions de celui-ci et à les attribuer à mon
image pour qu'elle prenne la taille du rectangle!



Merci bicoup!
Commenter la réponse de cs_Ninounette
projetf 26 Messages postés dimanche 15 avril 2007Date d'inscription 27 avril 2009 Dernière intervention - 1 mai 2007 à 13:37
0
Merci
salut a tous !
g a a peut pres la mm question. mais ce qu eje voudrai sa serrai enfait de pouvoir redimmensionner mon image dans ma form avec la souris. comme un peut ce kon peut faire avc nimporte quelle fenetre....
Commenter la réponse de projetf

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.