Hola!!!
He encontrado una forma de hacerlo, en la cual creo un Bitmap a partir del rectángulo de selección y luego creo un pictureBox que carga la imagen y que se muestra encima del pictureBox grande. Pero ahora tengo otro problema, me explico: cuando hago el MouseDown, arrastro y luego MouseUp, se dibuja el rectángulo de selección y también se dibuja el pictureBox, pero la imagen que me carga sale desplazada. Es como si no cojiera bien las coordenadas del puntero. Yo las coordenadas las calculo respecto del pictureBox con MouseEventArgs, no respecto al formulario. Es por esto que si estoy con el puntero dentro del pictureBox, me marca una coordenadas y si salgo fuera del pictureBox, me marca otras coordenadas totalmente diferentes. ¿Por qué puede ser esto?
A continuación te pongo mi código que dibuja un rectángulo (ver video
http://www.megaupload.com/?d=FZHW8Z52), a ver si me puedes ayudar:
private bool seleccionar = false;
private Rectangle RectanguloSeleccion = new Rectangle(new Point(0, 0), new Size(0, 0));
private Point PuntoInicio;
private Point PuntoFin;
private int alturaRectanguloSeleccion;
private int anchoRectanguloSeleccion;
private float[] valoresLineaDiscontinua ={ 3, 2, 3, 2 };
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{ this.Click_Raton(e); }
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{ this.Levantar_Raton(e); }
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{ this.Mover_Raton(e); }
private void Click_Raton(MouseEventArgs e)
{
if (seleccionar & e.Button == MouseButtons.Left)
{
PuntoInicio = new Point(e.X, e.Y);
}
}
private void Levantar_Raton(MouseEventArgs e)
{
if (seleccionar)
{
RectanguloSeleccion = new Rectangle(PuntoInicio.X, PuntoInicio.Y, anchoRectanguloSeleccion, alturaRectanguloSeleccion);
this.Cursor = System.Windows.Forms.Cursors.Cross;
Graphics objGrafico = this.pictureBoxPrincipal.CreateGraphics();
Pen pen = new Pen(Color.Red, 1);
pen.DashPattern = valoresLineaDiscontinua;
objGrafico.DrawRectangle(pen, RectanguloSeleccion);
}
}
private void Mover_Raton(MouseEventArgs e)
{
if (seleccionar & e.Button == MouseButtons.Left)
{
PuntoFin = new Point(e.X, e.Y);
anchoRectanguloSeleccion = PuntoFin.X - PuntoInicio.X;
alturaRectanguloSeleccion = PuntoFin.Y - PuntoInicio.Y;
}
}
Y este el el código de hacerlo ya con pictureBoxes + lo que ya tenía yo, y que dibuja los picturesBoxes, pero con las imágenes desplazadas (ver video
http://www.megaupload.com/?d=VPM0VDDX)
private bool seleccionar = false;
private Rectangle RectanguloSeleccion = new Rectangle(new Point(0, 0), new Size(0, 0));
private Point PuntoInicio;
private Point PuntoFin;
private int alturaRectanguloSeleccion;
private int anchoRectanguloSeleccion;
private float[] valoresLineaDiscontinua ={ 3, 2, 3, 2 };
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{ this.Click_Raton(e); }
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{ this.Levantar_Raton(e); }
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{ this.Mover_Raton(e); }
private void Click_Raton(MouseEventArgs e)
{
if (seleccionar & e.Button == MouseButtons.Left)
{
PuntoInicio = new Point(e.X, e.Y);
}
}
private void Levantar_Raton(MouseEventArgs e)
{
if (seleccionar)
{
RectanguloSeleccion = new Rectangle(PuntoInicio.X, PuntoInicio.Y, anchoRectanguloSeleccion, alturaRectanguloSeleccion);
Bitmap imagenPequeña = new Bitmap(anchoRectanguloSeleccion, alturaRectanguloSeleccion, this.pictureBoxPrincipal.Image.PixelFormat);
Rectangle rectDest = new Rectangle(0, 0, anchoRectanguloSeleccion, alturaRectanguloSeleccion);
Graphics g = Graphics.FromImage(imagenPequeña);
g.DrawImage(this.pictureBoxPrincipal.Image, rectDest, RectanguloSeleccion2, GraphicsUnit.Pixel);
g.Dispose();
PictureBox newPB = new PictureBox();
newPB.Image = imagenPequeña;
newPB.BorderStyle = BorderStyle.Fixed3D;
this.pictureBoxPrincipal.Controls.Add(newPB);
newPB.Left = PuntoInicio.X;
newPB.Top = PuntoInicio.Y;
newPB.Width = anchoRectanguloSeleccion;
newPB.Height = alturaRectanguloSeleccion;
this.Cursor = System.Windows.Forms.Cursors.Cross;
Graphics objGrafico = this.pictureBoxPrincipal.CreateGraphics();
Pen pen = new Pen(Color.Red, 1);
pen.DashPattern = valoresLineaDiscontinua;
objGrafico.DrawRectangle(pen, RectanguloSeleccion);
}
}
private void Mover_Raton(MouseEventArgs e)
{
if (seleccionar & e.Button == MouseButtons.Left)
{
PuntoFin = new Point(e.X, e.Y);
anchoRectanguloSeleccion = PuntoFin.X - PuntoInicio.X;
alturaRectanguloSeleccion = PuntoFin.Y - PuntoInicio.Y;
}
}
A ver si me puedes echar una mano. Gracias y saludos!!!!