Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   Cómo mostrar imagenes irregulares? (https://www.clubdelphi.com/foros/showthread.php?t=61840)

Softhem 24-11-2008 17:50:46

Cómo mostrar imagenes irregulares?
 
Hola amigos,

Soy novato para el manejo de gráficos en Delphi. Quisiera que me orientaran sobre cómo mostrar imágnes irregulares, en tiempo de ejecución, llamadas todas ellas mediante botones (que he colocado en la parte inferior de la pantalla). El efecto que busco es como armar un rompecabezas de piezas irregulares, donde las piezas las vas colocando sin una secuencia y al final muestra la figura completa. También les agradeceré me recomienden el formato de imagen más adecuado para que el programita no pese mucho.

Lepe 24-11-2008 19:02:45

En principio, un TImage con la propiedad Transparent en True, strecht a true, Autosize en false. Con eso ya tienes las piezas.

El moverlas, podría ser por botones (cambiando el top y left de cada imagen) o arrastrar y soltar.

El formato de imagen pues JPEG, tienes que añadir el "uses jpg" para poder usar ese formato.

¿te sirve?

Saludos

Lord Delfos 24-11-2008 19:09:14

Algo para mirar que puede ayudarte con el tema de arrastrar y soltar.

http://www.delphiforfun.org/programs...gImageDemo.htm

Softhem 24-11-2008 22:08:06

Gracias por las sugerencias. Las pondré en práctica ya y comento que pasa.

Saludos.

Softhem 25-11-2008 19:22:58

Cita:

Empezado por Lepe (Mensaje 327669)
En principio, un TImage con la propiedad Transparent en True, strecht a true, Autosize en false. Con eso ya tienes las piezas.

El moverlas, podría ser por botones (cambiando el top y left de cada imagen) o arrastrar y soltar.

El formato de imagen pues JPEG, tienes que añadir el "uses jpg" para poder usar ese formato.

¿te sirve?

Saludos

Hola, hola, FireBird:

Disculpas, creo que no me expliqué bien. Trato de armar algo parecido a un rompecabezas, en el que las piezas tienen formas no definidas (una parte es hembra y la otra macho, para ensamblarse), vamos como si se tratase de la división política de un país: Texas, California, Miami, etc. Las imágenes las tengo por ahora en formato GIF, rodeadas de una zona que debe ser transparente y no ocultar la imagen que quedase abajo, sino acoplarse a ella.

Gracias.

Lepe 25-11-2008 21:30:57

Te he entendido bien.

La idea es usar un TImage que será transparente, la imagen por tanto debe tener un color de fondo que después puede obligarse a ocultar. El resultado que ves en pantalla es sólo la imagen irregular. ¿se llega a ver el borde cuadrado del Timage?

Ese es el método fácil.

El método algo más complejo y laborioso, es crear una ventana irregular, es decir, en tiempo de diseño creas una ventana te tamaño de la pieza y ahora con las propiedades de la ventana:
-Color := clRed
- TransparentColor := clRed
- Transparent := true
pones un Timage con la imagen cargada de la pieza.

Cuando muestres esa ventana, será igual que el windows Media Player o esos reproductores de mp3 tan chulos con agujeros y demás. Pero esto tiene un fallo, si la imagen de la pieza tiene un color rojo puro, se creará un hueco en ese sitio.

Como estás haciendo un puzzle y es más que probable que uses todos los colores, no te recomiendo esta opción.

Saludos

Softhem 26-11-2008 15:29:43

Hola Lepe,

Sigo tratando de mostrar la imágenes de manera que se vaya formano la imagen final, pero lo que no logro hacer es que el color que rodea a las imágenes irregulares se transparente. Siempre se ve el color que las rodea, en este caso ya he probado con distintos colores como fondo y nada. Las imágenes son JPG, y al colocar una sobre la otra desaparece la que queda abajo.

Es más, probé iniciar el programita con una de las imágenes, activando Transparent en el TImage, y tampoco logro la transparencia. Seguramente algo estoy haciendo mal, usé Delphi 4, 5 y 7 y en ninguno logro la transparencia. :mad:

Heeeelp!!!

Saludos.

Lepe 26-11-2008 17:38:54

1 Archivos Adjunto(s)
He hecho pruebas con delphi 7 y con jpeg es cierto que no va las transparencias. Quizás usando un componente de terceros.

Aquí he hecho una prueba con bmp y si funciona correctamente, de hecho el color de fondo de cada pieza es distinta y funciona bien con el Transparent en cada imagen.

Si no recuerdo mal Delphi coge el pixel (0,0) de la imagen y después aplica la transparencia a ese color en todo el Timage.

Saludos

Softhem 26-11-2008 18:57:31

Gracias Lepe,

Efectivamente, con imágenes BMP no hay problema, hasta el Delphi 4 funciona bien. Sin embargo no funciona con las JPG. Probablemente requiere alguna variante de los formatos JPG, no obstante los manuales dicen que basta con incluir en uses la unidad "Jpeg", pero no funciona. Tambien dicen que el componente TImage hace la transparencia sobre el color que tiene el último pixel de abajo a la izquierda de la imagen involucrada.

Creo que no habrá más que usar imágenes BMP. :rolleyes:

Ahora mi problema se reduce a que permanezca la imagen anterior al sobreponerle una nueva. Desafortunadamente estoy comenzando a manejar gráficos en Delphi y no sé muchos de los trucos, propiedades y valores de éstos. :confused:

Te agradezco mucho el apoyo que me haz dado. Saludos

Lepe 26-11-2008 21:32:45

Cita:

Empezado por Softhem (Mensaje 328131)
no obstante los manuales dicen que basta con incluir en uses la unidad "Jpeg", pero no funciona. Tambien dicen que el componente TImage hace la transparencia sobre el color que tiene el último pixel de abajo a la izquierda de la imagen involucrada.

Creo que no habrá más que usar imágenes BMP. :rolleyes:

Ahora mi problema se reduce a que permanezca la imagen anterior al sobreponerle una nueva. Desafortunadamente estoy comenzando a manejar gráficos en Delphi y no sé muchos de los trucos, propiedades y valores de éstos. :confused:

Pues entonces debo decir que con JPG también funciona la transparencia, eso del último pixel me pasó algo extraño.

Al menos en Delphi 7 si fue añadir el uses jpeg y listo. después cargué la imagen sin problemas, eso sí, desde el IDE, no sé en ejecución como irá, pero debería ser igual.


Si abres las dos imágenes, verás que están de color azul y rojo el fondo, pues bien, con el paint estuve cambiando de color rojo el fondo con la utilidad aerógrafo sólo una parte de la foto, y ya en delphi, en JPG me hizo la transparencia a esa parte que tenía en rojo. Quizás tu último pixel es de otro color o tonalidad... no lo sé.

Saludos

Softhem 28-11-2008 01:59:13

Hola Lepe,

Sigo sin poder hacer transparentes mis imágenes JPG, ni en el Delphi 7. En uses pongo Jpeg pero no funciona. Ya limpié bien mis imágenes en las esquinas, ahora estoy usando fondos en color blanco... y nada. Me dices que tú no tienes problemas con Delphi 7y eso es más frustrante. También he trabajado en otra PC con el 7... sin éxito.

Con las imágenes BMP no tengo problemas, pero mis figuras pesan unas 90 veces más que las mismas en JPG y se nota un leve retardo al mostrar una a una. Esto ya se volvió un reto para mi... :mad:

Saludos.

Lepe 28-11-2008 17:03:48

a ver, a ver.... .que tengo instalada la biblioteca GraphicEx, que permite reconocer en delphi muchos formatos de imágenes (es gratuita), a ver si es eso :(.

Voy a cotillear un poco sobre el tema y te informo.

Note: Transparent has no effect unless the Picture property specifies a TBitmap object.

:(, pos probando otra cosa.

Lepe 28-11-2008 18:13:28

1 Archivos Adjunto(s)
El problema añadido del JPG es que obviamente comprime los colores y el fondo no es realmente Rojo, puede variar algunas tonalidades.

Solución: cambiar de formato. Como te decía he usado GraphicEx (tan sencillo como descomprimir y colocar en una carpeta accesible por el library path de delphi e incluir el uses GraphicEx). Hecho esto ya puedes abrir los .png, que como saben son imágenes sin pérdida de la calidad. (Mi bmp ocupaba 33 kb, el png 6 kb). He usado Gimp para la conversión.

También he pintado sobre el canvas del form la imagen, ya que estando dentro de un TImage no salía el fondo, quizás con más tiempo se pueda mejorar.

La idea sería ocultar la barra de título del Form2 y los bordes, hacer que puedas arrastrar la ventana arrastrando en la imagen (busca por el foro por HTCAPTION)

Saludos.

Softhem 28-11-2008 19:17:00

Gracias Lepe,

Eres muy amable en apoyarme en este reto. Haré lo que me dices y les comento. Covertiré los BMP en PNG, creo que con los JPG no se logrará la transparencia a menos que se incluyan en el Delphi componentes de terceros :(

Saludos.

Lepe 29-11-2008 02:36:16

usa irfanview te aliviará el proceso por lotes, marcas todos los archivos y le dices convertir... listo ;).

Saludos

Crandel 15-01-2009 22:54:08

Hola Softhem, no se si seguis interesado en el tema, si es asi, lo que necesitas es uno de los componentes que desarrollo nuestro compañero Fede (delphi.com.ar).

El componente se llama TImageTransp. Estaba disponible en su pagina web, pero por lo visto esta caida. Si no lo puedes encontrar a dicho componente, te lo busco y lo subo aqui.

Softhem 19-01-2009 19:34:49

Cita:

Empezado por Crandel (Mensaje 334661)
Hola Softhem, no se si seguis interesado en el tema, si es asi, lo que necesitas es uno de los componentes que desarrollo nuestro compañero Fede (delphi.com.ar).

El componente se llama TImageTransp. Estaba disponible en su pagina web, pero por lo visto esta caida. Si no lo puedes encontrar a dicho componente, te lo busco y lo subo aqui.

Gracias por tu respuesta. Sí sigo interesado en el tema. Me gustaría optimizar el proyecto que estoy realizando. Espero más información sobre el componente que mencionas. :)

delphi.com.ar 06-02-2009 14:09:26

Cita:

Empezado por Crandel (Mensaje 334661)
Hola Softhem, no se si seguis interesado en el tema, si es asi, lo que necesitas es uno de los componentes que desarrollo nuestro compañero Fede (delphi.com.ar).

El componente se llama TImageTransp. Estaba disponible en su pagina web, pero por lo visto esta caida. Si no lo puedes encontrar a dicho componente, te lo busco y lo subo aqui.

¿Alguien tiene el código de mi componente?... porque ni lo recuerdo!! :D

Lo que sucede si utilizamos ventanas irregulares, es que el dibujado de estas es mucho mas costoso, ya que no entra dentro de la lógica de overlapping de rectángulos. Un posibilidad concreta, es utilzar imágenes con transparencias, por ejemplo: GIF o PNG. Recomiendo las segundas, ya que tienen un canal Alpha y permiten un degradado mas suave.

Saludos!

Crandel 06-02-2009 14:37:28

1 Archivos Adjunto(s)
Cita:

Empezado por delphi.com.ar (Mensaje 337313)
¿Alguien tiene el código de mi componente?... porque ni lo recuerdo!! :D

Lo que sucede si utilizamos ventanas irregulares, es que el dibujado de estas es mucho mas costoso, ya que no entra dentro de la lógica de overlapping de rectángulos. Un posibilidad concreta, es utilzar imágenes con transparencias, por ejemplo: GIF o PNG. Recomiendo las segundas, ya que tienen un canal Alpha y permiten un degradado mas suave.

Saludos!

Yo lo tengo :D

aca lo subo, por si lo necesitas, para que veas que bueno soy con vos compartiendo tus cosas :p

Tal como comentas el dibujado es mucho mas costoso y tiene algunos problemas en la parte del refresco. Principalmente tuve problemas al usar un programa en que utilizaba este componente a traves del "Remote desktop" de windows, al prorgama le costaba muchisimo refrescar las imagenes.

El problema de usar imagenes con trasparencias es que cuando haces click sobre una parte en el que es trasparente igualmente el componente recibe el evento del click y no lo hace la imagen que esta por debajo. Tu componente si lo resuelve.

delphi.com.ar 06-02-2009 15:44:34

Cita:

Empezado por Crandel (Mensaje 337314)
El problema de usar imagenes con trasparencias es que cuando haces click sobre una parte en el que es trasparente igualmente el componente recibe el evento del click y no lo hace la imagen que esta por debajo. Tu componente si lo resuelve.

Tienes razón, salvo que tambien te dediques a implementar esa lógica, y descartar los eventos de mouse que esten sobre areas transaparentes.


PD: Si es mi letra!.. ese componente lo hice yo, pero lo perdí en el olvido :p


La franja horaria es GMT +2. Ahora son las 02:32:57.

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