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
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.