Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Gráficos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-10-2006
toorbye toorbye is offline
Miembro
 
Registrado: sep 2005
Posts: 24
Poder: 0
toorbye Va por buen camino
Dibujar sobre una imagen.

Hola, me gustaría que me pudieseis guiar un poco .He leído bastantes hilos en el foro, pero aun así no me aclaro.
Me gustaría sobre una imagen (un mapa en bmp) cargada mediante un Timage, situar varios puntos (puntos de interés). Con el tiempo tendría que poder poner mas donde yo quisiera. Supongo que para poner los puntos tendré que utilizar la propiedad Canvas del TImage, pero aun así no me aclaro muy bien… La idea es mediante un click colocar en esa zona el punto de interés.
Supongo que las coordenadas de los puntos tendrán que ir guardadas en una base de datos, para que en las sucesivas veces, al cargar el programa aparezcan ya los puntos en las zonas indicadas.

A ver si me podéis guiar un poco y que ideas se os o curren, o si existe algún tipo de componente para manejar esto de forma sencilla. Por cierto probé con el simplegraph pero no me aclaro como poder dibujar los puntos sobre el mapa.

Un saludo y gracias
Responder Con Cita
  #2  
Antiguo 15-10-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Si esos puntos debes poder borrarlos, editarlos, etc, considero muy oportuno guardar las coordenadas de los puntos. Otra opción es guardar el bitmap en un campo Blob, al rescatar la imagen, ya se ven los puntos, pero editar esos puntos es más "complejo".

Un punto de un solo pixel me parece casi imperceptible por el usuario, así que recomiendo una Elipse o bien un cuadrado, donde el centro de ese objeto, sea la coordenada a guardar.

Básicamente tienes que usar Canvas.Ellipsis para dibujar un punto redondo, o bien Canvas.Rectangle para dibujar un Cuadrado, si miras la ayuda, verás que tambien tienes que modificar las propiedades Canvas.Pen y Canvas.Brush ya que hay varios grosores de líneas (Pen) y varios formas de dibujar el cuadro (relleno completamente, a rayas horizontales, verticales, en diagonal, etc). Así como la forma de pintar (invirtiendo los colores, haciendo una mezcla del color de fondo con el color de la línea, superponer el color de la linea sobre el fondo, etc.

La mejor forma es haciendo un programita y probando todas las opciones.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 15-10-2006 a las 15:31:47.
Responder Con Cita
  #3  
Antiguo 15-10-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Aquí te dejo un pequeño juguete , arrastra con el ratón los símbolos de la derecha sobre la imagen para dibujarlos. En el código veras como dibujar círculos, cuadrados, lineas, etc.. entre otras cosas.
Archivos Adjuntos
Tipo de Archivo: zip Ejemplo29.zip (5,8 KB, 415 visitas)
Responder Con Cita
  #4  
Antiguo 15-10-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
[Hint] ufrmMain.pas(144): Variable 'R' is declared but never used in 'TfrmMain.imgSimb01MouseUp'
Es una tontería. Me ha servido de excusa para decir que el ejemplo es fantástico como siempre Seoane.
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 15-10-2006 a las 18:06:15.
Responder Con Cita
  #5  
Antiguo 15-10-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Parece que se me olvido hacer limpieza
Responder Con Cita
  #6  
Antiguo 16-10-2006
toorbye toorbye is offline
Miembro
 
Registrado: sep 2005
Posts: 24
Poder: 0
toorbye Va por buen camino
Muchas gracias a todos por vuestras respuestas, le voy a echar un ojo al ejemplo y ya os iré contando.

Un saludo
Responder Con Cita
  #7  
Antiguo 16-10-2006
toorbye toorbye is offline
Miembro
 
Registrado: sep 2005
Posts: 24
Poder: 0
toorbye Va por buen camino
He avanzado un poco, y el principal problema que me encuentro ahora, es como poder borrar un determinado TImage situado ya sobre el mapa.

A ver si me podeis guiar en este tema, un poco. Gracias
Responder Con Cita
  #8  
Antiguo 16-10-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Siguiendo con el ejemplo que propuse en este otro hilo, aquí te dejo este otro, puedes insertar cruces, equis y figuras simples (rectángulos, círculos). Puedes cargar una imagen como fondo, el mapa en tu caso. Puedes mover y eliminar los elementos una vez insertados. Y también puedes guardar y abrir las figuras en un archivo.

Creo que es bastante intuitivo, para seleccionar una figura haz clic sobre ella, para moverla arrastrala utilizando el ratón, para borrarla seleccionala y usa el menú "Editar" ... Bueno, echale un vistazo y me cuentas tus dudas.
Archivos Adjuntos
Tipo de Archivo: zip Ejemplo30.zip (7,0 KB, 284 visitas)
Responder Con Cita
  #9  
Antiguo 18-10-2006
toorbye toorbye is offline
Miembro
 
Registrado: sep 2005
Posts: 24
Poder: 0
toorbye Va por buen camino
Gracias Seoane por el ejemplo, muchisima gracias, por ayudarme.
Un saludo
Responder Con Cita
  #10  
Antiguo 18-10-2006
oregon oregon is offline
Miembro
 
Registrado: oct 2006
Posts: 90
Poder: 18
oregon Va por buen camino
Red face Con imagenes?

Me parece fantástica la posibilidad que se abre con los ejemplos 29 y 30 de seoane. Yo también ando metido en un problema parecido.
Necesito cargar una imagen (imagen de satelite) en un componente timage, y luego emplazar sobre ella dos tipos de puntos de los que más tarde necesito conocer sus coordenadas para realizar unos cálculos.
El caso es saber si es posible, en vez de dibujar, insertar un pequeño bmp (tipo icono) en el lugar deseado, y que luego se puedan mover para afinar o ajustar su posición. En realidad, no uno, sino tantos como se deseen.
Sería algo como que al pinchar sobre una opción del menu tipo "crear punto", se creara un timage, cargara una imagen pequeñita preestablecida, y permitiera colocarla únicamente sobre la imagen en la que se trabaja (como en los ejemplos), y que luego se pudiese desplazar o eliminar como en el ejemplo 30.
¿alguien sabe si es posible? ¿como? Se agradecen directrices!
Muchas gracias por vuestra ayuda y comentarios.

Ciao!
Responder Con Cita
  #11  
Antiguo 18-10-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Ese icono que quieres insertar, ¿seria siempre el mismo o cada icono puede ser diferente?, si son diferentes ¿seria un numero limitado de iconos preestablecidos o podría ser cualquier icono?. si solo es un icono la solución es inmediata, si es una lista de ellos podemos usar un TImageList para almacenarlos, pero si se puede insertar cualquier icono la cosa se complica, no es imposible, pero se complica.
Responder Con Cita
  #12  
Antiguo 18-10-2006
oregon oregon is offline
Miembro
 
Registrado: oct 2006
Posts: 90
Poder: 18
oregon Va por buen camino
Gracias Seoane,

Se trata de usar únicamente dos iconos distintos, para marcar dos cosas distintas en la imagen de fondo.

he encontrado un programa demostrativo de algo parecido a lo que quiero hacer. Está disponible en la página web de Neftalí, y creo que es muy útil para esto, y creo que puede solucionar el problema.

De toda formas, tus ideas también son bienvenidas para resolver el asunto.

Gracias de nuevo,
Responder Con Cita
  #13  
Antiguo 18-10-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Me alegro de que ya hayas resuelto el problema, sin embargo yo he seguido con el ejemplo un poco mas. Ahora en vez de usar arrays dinámicos uso TObjectList, y además ya se pueden insertar imágenes. También permite exportar la imagen resultante como un bmp.

Aquí te lo dejo, puede que te sirva, yo pido la ruta de la imagen cada vez que se quiere insertar una nueva, tu puedes usar el mismo método pero utilizando una ruta fija.
Archivos Adjuntos
Tipo de Archivo: zip Ejemplo31.zip (7,4 KB, 252 visitas)
Responder Con Cita
  #14  
Antiguo 18-10-2006
oregon oregon is offline
Miembro
 
Registrado: oct 2006
Posts: 90
Poder: 18
oregon Va por buen camino
Fantástico

Pues funciona de maravilla. Es exáctamente lo que quería. Me dedicaré a destripar el codigo fuente para ver si aprendo a programar de verdad . Y a ver como lo aprovecho para mi programa.

La verdad es que da gusto este foro.

ciao!
Responder Con Cita
  #15  
Antiguo 02-11-2006
oregon oregon is offline
Miembro
 
Registrado: oct 2006
Posts: 90
Poder: 18
oregon Va por buen camino
Coordenadas

Saludos,

Tras varios días pengándome con esto, creo que he conseguido apañarlo para mi aplicación. Muchas gracias seoane por los ejemplos.
Ahora tengo un par de problemas asociados. ¿cómo capturo las coordenadas de cada uno de los iconos pintados en runtime? Necesito pasar las coordenadas de cada uno de los iconos a un label o un stringgrid, pero no se como se llama cada uno de estos componentes creados en ejecución.

¿alguna idea?
Gracias!!
Responder Con Cita
  #16  
Antiguo 02-11-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
En el ejemplo 31 cada una de las figuras se corresponde a un objeto creado en tiempo de ejecución e incluido en un TObjectList llamado Figuras. Pues bien si necesitamos saber las coordenadas de los objetos solo tenemos que recorrer la lista y para cada objeto revisar su propiedad BoundRect. Algo así:

Código Delphi [-]
var
  i: integer;
  Figura: TFigura;
begin
   for i:= 0 to Figuras.Count - 1 do
    begin
      Figura:= TFigura(Figuras[i]);
      with Figura.BoundsRect do
        Memo1.lines.add(Format('Left=%d,Top=%d,Right=%d,Bottom=%d',
          [Left,Top,Right,Bottom]));
    end;
end;

El código anterior es solo un ejemplo, se le pueden añadir un par de cosas. Por ejemplo si lo que quieres es el punto central puedes hacer algo como esto:
Código Delphi [-]
  x:= (Figura.BoundsRect.Left + Figura.BoundsRect.Right) div 2;
  y:= (Figura.BoundsRect.Top + Figura.BoundsRect.Bottom) div 2;

También puede ser que quieras diferenciar cada figura por separado, para eso añade a la clase TFigura un nombre, a la hora de crear una figura nueva tendrás que asignarle un nombre y luego dentro del bucle for solo tendrás que comprobar el nombre para saber cual es cada una.
Responder Con Cita
  #17  
Antiguo 02-11-2006
oregon oregon is offline
Miembro
 
Registrado: oct 2006
Posts: 90
Poder: 18
oregon Va por buen camino
Fantástico

Muchas gracias,

creo que con esto ya puedo solucionar el problema.
Qué haría yo sin este foro!
Responder Con Cita
  #18  
Antiguo 06-12-2006
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.408
Poder: 22
fjcg02 Va camino a la fama
Oregon,
estoy trabajando en algo similar, para permitir pintar rutas. La idea básica es utilizar ortofotos, y sobre ellas, marcar los puntos que se necesiten. Tengo el prototipo de las funciones de cálculo de coordenas utm y pintado de lugares tomando las coordenadas de una BBDD. En esta misma BBDD están incluidas las ortofotos.
Te paso el programa ( permite cargar cualquier ortofoto y referenciarla si sabes las coordenadas ), y que pinta los puntos. Concretamente estoy trabajando con la provincia de Bizkaia - Euskadi , pero valdría para cualquier zona de españa, ya que he sacado de la guia campsa las coordenadas utm de todas las poblaciones.En el ejemplo que incluyo sólo he dejado unas cuantas para que el archivo no pese demasiado.
Para utilizarlo, descomprime el proyecto en un directorio, y cambia el nombre del mdb a mapas.mdb
Para utilizarlo, tienes que conseguir una ortofoto, dar de alta el registro en la ventana gestón de mapas, darle las coordenadas utmx y utmy de la esquina inferior izquierda , el offset que es la distancia en metros del lado de la ortofoto, y cargar la propia foto.
Me parece que sólo he utilizado compenentes estandard, por lo que con D7 debiera compilar.
Creo que sólo funciona para el huso 30, pero para mi es suficiente.
Como ya te he indicado, el programa es un prototipo. Me queda encapsular todo en un mapa de escalado inferior para saltar a la foto de detalle. También me falta la gestión de las rutas, pero es más de lo mismo que ya tengo. La valiosa información que me han ofrecido desde este foro me ha servido muchísimo. También las respuestas a mis preguntas referentes a mapas a otros conocidos.
Temas a mejorar: pintado de lineas de referencia en las fotos, calculo de coordenas geodesicas ( latitud y longitud ) simultáneamente, posibilidad de importar rutas desde ficheros proporcionados por gps's, ... un montón de cosas que con tiempo, ....
Bueno, teniendo en cuenta que lo estoy haciendo para el grupo de jubilados en el que participa mi padre, para que tengan las salidas al monte en la bbdd y puedan preparar un fancine anual, pues ni tan mal.
Lo dicho, a poquitos, pues va saliendo el germen.
Si tienes tiempo de echarle un vistazo, si te parece interesante, si tienes algo que me pueda interesar y que te apetezca compartir ( compartir es amar ) pues estoy a tu disposición.
Un saludo
Nota: he actualizado el adjunto con un par de cosillas más incluidas
Archivos Adjuntos
Tipo de Archivo: zip Copia de Mapas.zip (17,5 KB, 148 visitas)
Tipo de Archivo: zip mapas.zip (7,7 KB, 133 visitas)
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -

Última edición por fjcg02 fecha: 08-12-2006 a las 00:47:09.
Responder Con Cita
  #19  
Antiguo 07-12-2006
oregon oregon is offline
Miembro
 
Registrado: oct 2006
Posts: 90
Poder: 18
oregon Va por buen camino
Muchas gracias fjcg02,

POr lo que me cuentas tiene muy buena pinta. Sin embargo, tengo un pequeño problema. Trabajo con Turbo Delphi, y no puedo instalar componentes externos. Por eso, cuando intento compilar me dan error todos los componentes JV. ¿te importaría pasarme un ejecutable para ver como funciona? Así de paso te puedo hacer de "Beta-tester"
Mientras tanto me llevo el código fuente para repasarlo a fondo este largo fin de semana.

Respecto a mi aplicación, la verdad es que va muy retrasada, pero no tengo problema en dejarlo aquí para que puedas aprovechar algo. Si es que puedes aprovechar algo del código de un principiante como yo. Ahora no lo tengo aquí, pero lo dejaré lo antes posible.

Muchas gracias de nuevo fjcg02.
Un saludo,
Responder Con Cita
  #20  
Antiguo 08-12-2006
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.408
Poder: 22
fjcg02 Va camino a la fama
oregon,
no tengo problemas para pasarte el ejecutable, pero pesa un mega, y en esta página no se permiten archivos de ese tamaño. Si me indicas cómo hacertelo llegar, no tengo ningún problema.
Por otro lado, el unico objeto JV que tengo es un JvDBImage, para visualizar los jpgs de la bbdd y/o cargarlos. Lo que ocurre que el Tdbimage no me permite cargar jpg's directamente. Si cambias ese objeto, y 'trampeas' lo que esté asociado a él, no tendrás problemas en utilizar el código para compilar.
Por otro lado, he conseguido pintar las líneas de referencia sin problemas ( cuadricula sobre la foto) para tener referencias.
Espero que puedas darle caña al tema y que te valga el resto en caso de que no puedas compliar.
Un saludo
Por cierto, es un placer ayudar a cualquiera. He sido visitante de ese foro y he aprendido mucho, pero hasta hace poco casi no preguntaba ni intervenía. Parece que la edad me quita la timidez.
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
dibujar en un TImage una imagen Drake C++ Builder 5 03-07-2006 02:29:02
Dibujar en Delphi una imagen OLE de access Esti Conexión con bases de datos 2 24-11-2005 15:02:00
Dibujar figuras sobre un DBChart? sano815 Gráficos 1 14-10-2005 06:21:58
Obtener posicion del cursor sobre una imagen joni Varios 3 01-04-2005 22:05:54
Dibujar imagen con ImageList en StringGrid neon OOP 1 20-12-2004 19:24:44


La franja horaria es GMT +2. Ahora son las 11:20:38.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi