cs_Ninounette
Messages postés18Date d'inscriptionjeudi 22 septembre 2005StatutMembreDernière intervention26 avril 2006
-
30 janv. 2006 à 11:51
projetf
Messages postés26Date d'inscriptiondimanche 15 avril 2007StatutMembreDernière intervention27 avril 2009
-
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 :)
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 6 févr. 2006 à 11:36
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 );
Equinox84
Messages postés63Date d'inscriptionlundi 2 février 2004StatutMembreDernière intervention19 mai 2010 30 janv. 2006 à 12:03
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 ...)
cs_Ninounette
Messages postés18Date d'inscriptionjeudi 22 septembre 2005StatutMembreDernière intervention26 avril 2006 30 janv. 2006 à 12:15
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.
cs_Ninounette
Messages postés18Date d'inscriptionjeudi 22 septembre 2005StatutMembreDernière intervention26 avril 2006 30 janv. 2006 à 13:35
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.
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 30 janv. 2006 à 16:09
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;
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?
cs_Ninounette
Messages postés18Date d'inscriptionjeudi 22 septembre 2005StatutMembreDernière intervention26 avril 2006 9 févr. 2006 à 09:27
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!
projetf
Messages postés26Date d'inscriptiondimanche 15 avril 2007StatutMembreDernière intervention27 avril 2009 1 mai 2007 à 13:37
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....