• Domingo 22 de Diciembre de 2024, 10:27

Autor Tema:  Selecionar Un Trozo De Una Imagen Y Obtener Sus Co  (Leído 4047 veces)

kalixe985

  • Miembro activo
  • **
  • Mensajes: 33
    • Ver Perfil
Selecionar Un Trozo De Una Imagen Y Obtener Sus Co
« en: Miércoles 17 de Octubre de 2007, 02:14 »
0
Hola a tod@s!!!

Estoy realizando una aplicación en la cual se cargue una imagen (en el formato que sea) y luego se pueda seleccionar un trozo de esta, quedando este trozo seleccionado "marcado" por algun recuadro (de línea punteada por ejemplo) y que también me devuelva las coordenadas del trozo respecto a la imagen.

Lo de poder cualquier cargar imagen ya lo tengo echo, pero necesito ayuda en la parte de poder seleccionar un trozo de la imagen, que este trozo se quede "marcado" y obtener las coordenadas de este trozo, respecto a la imagen.

Otra cosa que me serviría es poder obtener las coordenadas del puntero en cada momento.


Ya se que pido mucho, acepto sugerencias. Alguien me puede ayudar? Gracias de antemano!!!!!!

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Selecionar Un Trozo De Una Imagen Y Obtener Sus Co
« Respuesta #1 en: Sábado 27 de Octubre de 2007, 16:13 »
0
con el picture box loo puedes hacer, pero no es algo que ya venga hecho.

Para el mouse: Control.Mouse

Para dibujar el rectangulo puedes usar GDI

para extraer la porcion de la imagen que marcaste usa las cooordenadas previamente guardadas y opera sobre el bmp o incluso creo que esta parte si ya esta en el picture box.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Selecionar Un Trozo De Una Imagen Y Obtener Sus Co
« Respuesta #2 en: Sábado 27 de Octubre de 2007, 16:32 »
0
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

kalixe985

  • Miembro activo
  • **
  • Mensajes: 33
    • Ver Perfil
Re: Selecionar Un Trozo De Una Imagen Y Obtener Sus Co
« Respuesta #3 en: Sábado 27 de Octubre de 2007, 20:04 »
0
Hola!!!
Muchísimas gracias por responder. Me han servido bastente sus enlaces. Ahora mismo estoy en la parte de tratar de dibujar un rectángulo de selección (como por ejemplo cuando usa el Paint de Windows y selecciona alguna parte de una imagen). Luego de que pueda hacer eso, me dedicaré a que el trozo seleccionado se guarde  y pueda aplicar otras acciones sobre él.
Ahora mismo necesito ayuda en lo de seleccionar, más en concreto en que se dibuje el rectángulo de selección y que éste se quede dibujado. ¿Sabe cómo podría hacerlo? Yo creo que estoy cerca de conseguirlo, pero no me dibuja bien los rectángulos, salen en otra posición diferente. Mi código es el siguiente:

Código: Text
  1.         
  2. bool hazDibujo=false;
  3. private int XclickInicial;
  4. private int YclickInicial;
  5. private int XclickFinal;
  6. private int YclickFinal;
  7. private float[] valoresLineaDiscontinua ={ 3, 2, 3, 2 };
  8.  
  9.         private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
  10.         {
  11.             hazDibujo = true;
  12.             XclickInicial = e.X;
  13.             XclickInicial = e.Y;
  14.  
  15.         }
  16.         private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
  17.         {
  18.             hazDibujo = false;
  19.             XclickFinal = e.X;
  20.             YclickFinal = e.Y;
  21.           
  22.         }
  23.  
  24.         private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
  25.         {
  26.             if (hazDibujo)
  27.             {
  28.                 Graphics objGrafico = this.pictureBox1.CreateGraphics();
  29.                 Pen pen = new Pen(Color.Black, 3);
  30.                 pen.DashPattern = valoresLineaDiscontinua;
  31.                 objGrafico.DrawRectangle(pen,XclickInicial,YclickInicial,XclickFinal-XclickInicial,YclickFinal-YclickInicial);        
  32.             }
  33.  
  34. }
  35.  
  36.  

Adjunto imágenes de cómo me sale ahora (dibujoMalo.jpg) y cómo me debería salir(dibujoBueno.jpg).

A ver si me puede ayudar, gracias y saludos!!!!
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Selecionar Un Trozo De Una Imagen Y Obtener Sus Co
« Respuesta #4 en: Sábado 27 de Octubre de 2007, 22:57 »
0
utiliza las funciones de conversion de rectangulos que hay en la forma:
RectangleToClient etc.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

kalixe985

  • Miembro activo
  • **
  • Mensajes: 33
    • Ver Perfil
Re: Selecionar Un Trozo De Una Imagen Y Obtener Sus Co
« Respuesta #5 en: Domingo 28 de Octubre de 2007, 00:58 »
0
Listo. Me lo voy a mirar y le digo algo.
Gracias!!!

kalixe985

  • Miembro activo
  • **
  • Mensajes: 33
    • Ver Perfil
Re: Selecionar Un Trozo De Una Imagen Y Obtener Sus Co
« Respuesta #6 en: Martes 30 de Octubre de 2007, 01:51 »
0
Hola!!!
Ya he probé la función  que me dijo y me he miré otras que me podían servir, en concreto la PointToClient, PointToScreen y otras. En concreto he utilizado la PointToClient (devuelve  coordenadas de pantalla, en coordenadas de cliente). Ahora ya he conseguido que se me dibuje la zona de selección y se quede seleccionado (al menos hasta que no haga otro MouseDown...). Los 2 problemas que me han surgido ahora son:
1º) Cuando utiliza PointToScreen o PointToClient, me devuelve en coordenadas de pantalla o de cliente. El problema es que al hacer esto, hay un "error" en las coordenadas que devuelve, y toca sumarle 47 y 65 pixeles en la x y en la y, respectivamente, para que el rectángulo dibujado coincida exactamente con la posición del puntero, y no lo dibuje un poco alejado del puntero.

2º)Cuando hago el mouseMove, se van dibujando diferentes rectángulos (mirar la captura MouseDown+MouseMove.jpg)  hasta que hago el MouseUp, que es cuando se borran los rectángulos y aparece el bueno (mirar MouseUp.jpg). ¿Hay alguna forma para que sólo se dibuje el rectángulo de selección mientras muevo el mouse, y los de posiciones anteriores se borren? Es como el MSPAINT lo que quiero hacer, que se pueda seleccionar un área de una imagen.

En las imagenes adjuntas creo que lo entenderá mejor...

A ver si me puede dar una ayudita, gracias!!!!
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.