Problema Con El Refresco De Un PictureBox (Solucionado)


Objetivo: Problema Con El Refresco De Un PictureBox (Solucionado)
Saludos:
Tengo un PictureBox que carga una imagen de un fichero. Hasta ahí guay.
Como no me gusta eso de la propiedad Stretch, que no respeta las propiedades de la imagen y la deforma, pues utilizo una herramienta externa para redimensionarla cada vez que el contenedor reubica sus controles (evento Arrange).

El código, simplificado, es el siguiente:

PUBLIC SUB Panel1_Arrange()

DIM r AS Result
DIM lafoto AS String

IF ME.imagen.text THEN 'si hay grabado un enlace a una imagen en la base de datos
lafoto = "/tmp/foto" 'path en /tmp para un fichero temporal
SHELL "convert -resize " & ME.Panel1.Height & "x" & ME.Panel1.height & " " & ME.imagen.text & " " &/ lafoto WAIT 'Redimensiono la foto en un fichero temporal al tamaño del contenedor de la misma, Panel1 (arrangement=fill y Expand=true)
TRY ME.foto.Picture = Picture.Load(lafoto)
IF ERROR THEN
ME.imagen.text = "" 'si falla la carga de la foto no se avisa, símplemente se elimina del campo de texto, para que desaparezca el enlace malo al grabar.
ENDIF
ENDIF

END


Hasta aquí todo perfecto. Como la base de datos es local (sqlite) todo va muy rapidito y bien.
El problema es que cuando maximizo el formulario y la foto alcanza su tamaño más grande, al "desmaximizar" (Perdona, Cervantes) el fondo de la imagen no se limpia y la imagen en su nuevo tamaño (menor) queda superpuesta al resto de la imagen más grande. Si modifico el tamaño del formulario o lo minimizo y restauro o lo que sea desaparece ese fondo erróneo. He probado con un Me.foto.Clear antes del ME.foto.Load, pero ni caso.
Las preguntas son dos:

1.- ¿Alguien tiene una manera de cargar la foto a su tamaño sin distorsionarla y sin recurrir a herramientas externas (convert en este caso)?
2.-¿Cómo puedo evitar ese fondo fósil que permanece tras desmaximizar?

Cualquier sugerencia será bienvenida.
Gracias de antemano.

última edición por shordi el Viernes, 24 Junio 2011, 18:29; editado 2 veces
Perfil MP  
Objetivo: Re: Problema Con El Refresco De Un PictureBox
Por cierto... investigando en este tema he visto que tanto el evento Resize del formulario como el Arrange, tanto del formulario como del panel contenedor, se ejecutan varias veces al mostrar la imagen por primera vez (tres o cuatro veces)... Eso es un coñazo cuando estás haciendo una llamada SHELL...
¿Cómo evitar eso? y ¿Por qué ocurre?¿Tiene que ver con las animaciones de pantalla del compiz?....

Nuevo día, nuevo problema.... joer

Perfil MP  
Objetivo: Re: Problema Con El Refresco De Un PictureBox
Hola shordi

No he realizado ninguna prueba con el PictureBox esta vez, pero tengo algo parecido usando un DrawingArea y un control ScrollView. El fin es el mismo, tengo una imagen (gran imagen) cargada en un drawingarea que redimensiono al tamaño de la imagen y como no entra en el espacio visible, pues ese drawingarea está dentro del scrollview. Mediante el ratón puedo arrastrar la imagen (o mejor dicho el propio drawingarea) y nunca redimensiono la imagen en sí misma, aunque no veo el inconveniente en hacerlo.

Gracias a que el dibujado de la imagen se produce dentro del evento _Draw del drawingarea, ésta se refresca siempre que se dispara ese evento (que es siempre que se necesita, automáticamente) y va muy fluido. Como nota adicional, si usamos dicho evento para dibujar, la propiedad "Cached" del drawingarea debe de estar en False.

Puede que el siguiente código te de algunas ideas. El nombre del control drawingarea en este caso es "canvas".

http://www.assembla.com/code/dfhlog...oc.class?rev=59

Disculpa el coloreado de la sintaxis, parece que el sistema no entiende el código gambas.

Saludos

Perfil MP  
Objetivo: Re: Problema Con El Refresco De Un PictureBox
jeje, ni se me había ocurrido usar un DrawingArea... Estudio tu código y te cuento.
Gracias Jesús.

Perfil MP  
Objetivo: Re: Problema Con El Refresco De Un PictureBox
Solucionado. Efectivamente el un DrawingArea el control adecuado para esto. Un poquito de investigación y todo solucionado, sin la chapuza esa de recurrir a convert... jeje
Gracias por las pistas, Jesús.
He hecho un pequeñísimo proyecto con el ejemplo ya solucionado, por si a alguien le interesa.

Lo podéis bajar de aquí http://desconcertado.es/archivos/visor.zip

Perfil MP  

Página 1 de 1


  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 0.393s (PHP: -79% SQL: 179%)
Consultas SQL: 45 - Debug off - GZIP Activado