Ir al contenido


Foto

Pintar superficie poligono respetando relieve de la imgen de fondo


  • Por favor identifícate para responder
8 respuestas en este tema

#1 el-mono

el-mono

    Advanced Member

  • Miembros
  • PipPipPip
  • 137 mensajes

Escrito 20 mayo 2013 - 06:39

Buenos dias queridos compañeros.

Imagen Enviada


Asi queda mi prueba (Horrible):
Imagen Enviada

Lo que necesito hacer es sobre es pintar una porcion de la superficie de una imagen como la que ven arriba, para ello lo que intente hacer es utilizando Regiones y por ultimo poligonos. El tema es que lo quepinta se nota mucho que es una figura (poligono, circunferencia) sobre la imagen y no como me gustaria (como esen la imagen que muestro arriba ) donde se nota (al menos yo lo veo asi ) que el color de relleno de la porcion de la imagen respeta el relieve.

Nota: Estoy trabajando con firemonkey primero para aprender y otra porque lo veo mas dirigido a este tipo de trabajos.

Pregunta:

Como puedo hacer para rellenar con un color un poligono dibujado sobre la imagen y que me respeta las ondulaciones de la superficie de la cara del diente ?


Espero se entiendan mi pregunta y desde ya muchas gracias.
  • 0

#2 escafandra

escafandra

    Advanced Member

  • Moderadores
  • PipPipPip
  • 3.991 mensajes
  • LocationMadrid - España

Escrito 20 mayo 2013 - 08:46

Lo que estas buscando es usar una semitransparencia, es decir pintar dejando ver lo que antes había con cierto nivel de opacidad.

En su día escribí un tutorial sobre el tema de las transparencias que te puede resultar útil a la hora de tomar alguna idea.


Saludos.
  • 0

#3 el-mono

el-mono

    Advanced Member

  • Miembros
  • PipPipPip
  • 137 mensajes

Escrito 20 mayo 2013 - 12:25

Buen dato,voy a practicar y ver los resultados.

Escafandra estaba leyendo el tutorial en un hilo sobre regiones y como lo aplicabas utilizando mascaras sobre un formulario para emular la interfaz de winamp. Vos crees posible que utilizando esta técnica se pueda aplicar para pintar las caras de un diente como es mi necesidad o solo escribiendo polígonos como  se me ocurrió por ahora ?

  • 0

#4 escafandra

escafandra

    Advanced Member

  • Moderadores
  • PipPipPip
  • 3.991 mensajes
  • LocationMadrid - España

Escrito 20 mayo 2013 - 02:48

El problema es que las caras del diente estén bien definidas sobre un fondo monocolor. En ese caso puedes usar máscaras de bitmap como en el tutorial para realizar tus transparencias.

Puede que te interese este otro tutorial gráfico: resta de imágenes


Saludos.
  • 0

#5 el-mono

el-mono

    Advanced Member

  • Miembros
  • PipPipPip
  • 137 mensajes

Escrito 20 mayo 2013 - 03:48

Ok escafandra definitivamente la tenes muy clara con los gráficos.

El ultimo tutorial esta buenisismo aunque creo no servirá para mi propósito ya que la idea es que el usuario vaya pintando las caras de los dientes sobre superficies que yo debo definir previamente de alguna manera (poligonos sobre la imagen) para delimitar el area a pintar.

Te muestro un video donde se ve que es lo que debo hacer:

Odontogram Control in a sample UI

Desde ya muchas gracias voy a seguir investigando para ver alguna manera de hacerlo.




Edito: Arreglando enlace de video.
  • 0

#6 Delphius

Delphius

    Advanced Member

  • Moderador
  • PipPipPip
  • 6.295 mensajes
  • LocationArgentina

Escrito 20 mayo 2013 - 07:56

No vi el video pero algo me dice que lo que buscas es implementar un sistema de control de odontrograma.

A mi parecer lo más simple y efectivo es directamente disponer del conjunto de imágenes de todas las combinaciones posibles de tratamiento y arreglos que se aplica a un diente.

Partamos del hecho que un odontrograma estándar se representa de ésta forma:

http://www.google.co...16&tx=248&ty=61

Cada casillero identifica a un diente. Donde cada uno tiene 5 cuadrículas. Lo que se pinte en ellas representa el tipo de trabajo realizado.

Lo de mostrar los dientes a como quieres es más de pinturita que una necesidad, convengamos.

Entonces en lugar de pintar regiones sobre estas cuadrículas, lo más rápido es tener tantas imágenes como se necesite para generar todas las combinaciones posibles. Luego el usuario simplemente selecciona el "tratamiento" a aplicar, hace clic en la zona y el sistema detecta el estado actual del diente, le suma el nuevo estado del diente y simplemente se muestra la imagen que cumpla dicha suma.

Así para cada diente. Se puede entonces aprovechar los frames para abstraer a un diente. Lo siguiente es generar tantos frames como se necesite y distribuirlos en la forma correcta. Tal vez se deba emplear un TScrollBox para poder desplazarse horizontal y verticalmente sobre el odontograma.

Espero que se entienda.

El punto es que viendo la amplia combinaciones de estados y de dientes, dejarle al sistema la responsabilidad de estar repintando la pantalla (que será cada vez que se haga un cambio o se mueva de una ventana a otra) es un costo que se puede evitar. Se pierde más ciclo de procesador pintando cada diente que abrir en cada frame/diente una imagen directamente con el estado en cuestión.

Saludos,
  • 0

#7 el-mono

el-mono

    Advanced Member

  • Miembros
  • PipPipPip
  • 137 mensajes

Escrito 21 mayo 2013 - 11:42

Hola Delphius como estas, veo que sos de Salta yo soy de tucuman.

Justamente la imagen que pones en el enlace es de mi programa y es este Odontograma que debo reemplazar por algo mas gráfico como lo que intento hacer. Como sabrás siempre el usuario tiene la razón y es por pedido de ellos que estoy trabajando en esto, el Odontograma actual que tiene mi sistema es muy Argento y como tengo la suerte de tener clientes de otros países pues es para ellos algo de mas utilidad y casi una exigencia a estas alturas.
El tema que planteas de tener imágenes por cada combinación es imposible ya que imagínate la cantidad de posibilidades de combinación que se puede tener y tener una imagen por cada una hasta es muy engorroso, es por ello que me decante por permitirles pintar los dientes es así como lo hace el Odontograma actual.

Para el tema de transparencias y sobre todo aplicado a polígonos como lo que estoy haciendo yo lo pueden ver también en esta pagina:

http://itinerantdeve...logspot.com.ar/

Saludos


  • 0

#8 Sergio

Sergio

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.092 mensajes
  • LocationMurcia, España

Escrito 27 mayo 2013 - 03:09

Las transparencias de escafandra no es lo ideal, una transparencia resta el relieve, pero poco, asi que no se nota mucho, pero varias transparencia matan la imagen original.

Colorear sin perder los tonos de grises de abajo se consigue trabajando los colores en formato HSV en lugar de RGB (http://en.wikibooks....:_RGB,_HSV,_HSL).

En HSV tienes separada las "sombras", que van en la V (value of brigthness) y que en tu caso respetarias, y solo modificarias el H = HUE (el tinte del color, rojo en tu ejemplo) y la S = saturación, que pondrías a tope.

En esquema, necesitas esto:

Pixel -> RGB -> HSV, defines H con tu color, S lo pones a su valor máximo, V lo respetas -> de nuevo a RGB -> Pixel.

Funciones para pasar un color de RBG a HSV hay en internet ya listas, mira el código fuente de está página:

http://www.csgnetwor...gcolorsel4.html
  • 0

#9 el-mono

el-mono

    Advanced Member

  • Miembros
  • PipPipPip
  • 137 mensajes

Escrito 27 mayo 2013 - 12:21

Sergio muchas gracias por tu información me sirvió bastante, al final me queda así el odontograma (tengo que trabajar un poco mas el pintado ) pero ahí va tomando forma.

Imagen Enviada
  • 0