Hola foro, en mi aplicacion tengo
REDEFINE IMAGE oImage ID 10 OF oDlg UPDATE
y cargo la imagen con
oImage:LOADIMAGE(,NomAImg)
Al hacerlo asi, si la imagen es mas grande que el espacio definido, muestra solo una parte, si es mas pequeña, sale en solo una parte del espacio, si uso el ADJUST si ocupa todo el espacio pero la imagen se distorciona si las proporciones no son iguales.
La idea seria que ocupara el espacio ya sea a lo alto o a lo ancho de forma que guarde las proporciones y no se distorcione.
Alguna idea? Salu2
Al no encontrar una solucion ya definida, construi lo siguiente con buenos resultados (seguramente se puede hacer mas sencillo):
Espero le sirva a alguien. +Salu2
REDEFINE IMAGE oImage ID 10 OF oDlg UPDATE
y cargo la imagen con
oImage:LOADIMAGE(,NomAImg)
Al hacerlo asi, si la imagen es mas grande que el espacio definido, muestra solo una parte, si es mas pequeña, sale en solo una parte del espacio, si uso el ADJUST si ocupa todo el espacio pero la imagen se distorciona si las proporciones no son iguales.
La idea seria que ocupara el espacio ya sea a lo alto o a lo ancho de forma que guarde las proporciones y no se distorcione.
Alguna idea? Salu2
Al no encontrar una solucion ya definida, construi lo siguiente con buenos resultados (seguramente se puede hacer mas sencillo):
bBmp:={||(oBmp:=PN_AjusImg(NomAImg,oImage,oBmp),oImage:REFRESH(),oDlg:REFRESH(),SYSREFRESH())}
REDEFINE IMAGE oImage oBmp ID 10 OF oDlg UPDATE //Espacio para la foto, Foto a mostrar
ACTIVATE DIALOG oDlg CENTER ON INIT (EVAL(bBmp))
//============================================================================*
//Extrae la imagen del archivo que se indique y lo ajusta al espacio correspondiente
FUNCTION PN_AjusImg(NomAImg,oImage,oBmp) //Nombre del Archivo que contiene la imagen con directorio y extencion, Objeto que contendra la imagen, Objeto de la imagen
LOCAL CooDisp,AnchoDisp,AltoDisp //Coordenadas disponibles, Ancho y alto en pixeles que estan disponibles para colocar la imagen
LOCAL Ancho,Alto,Zoom:=1
CooDisp:=oImage:GetCliRect() //Extrae el objeto del marco que contendra la foto
AnchoDisp:=CooDisp:nRight ; AltoDisp:=CooDisp:nBottom //Extrae el ancho y alto en pixeles del espacio diponible para la foto
oBmp:LOADIMAGE(,NomAImg) //Carga la imagen del archivo definido por el usuario
Ancho:=oBmp:nWidth() ; Alto:=oBmp:nHeight() //Ancho y alto originales de la imagen
IF Alto>Ancho ; Zoom:=AltoDisp/Alto
ELSE ; Zoom:=AnchoDisp/Ancho
ENDIF
oBmp:nZoom:=Zoom //Para que ajuste la imagen al espacio disponible sin distorcionarla
Ancho:=oBmp:nWidth() ; Alto:=oBmp:nHeight() //Ancho y Alto de la imagen ya ajustada al espacio disponible
CooDisp:nTop:=INT((CooDisp:nBottom-Alto)/2)+oImage:nTop //El espacio disponible para la imagen lo recorre hacia arriba para centrarlo. (AltoDelEspacioDisponible-AltoDeLaImagen/2+LugarDondeIniciabaOriginalmente)
CooDisp:nBottom:=CooDisp:nTop+Alto //Ajusta el ancho del espacio disponible segun el nuevo espacio disponible
CooDisp:nLeft:=INT((CooDisp:nRight-Ancho)/2)+oImage:nLeft //El espacio disponible para la imagen lo recorre hacia la derecha para centrarlo. (AnchoDelEspacioDisponible-AnchoDeLaImagen)/2+LugarDondeIniciabaOriginalmente
CooDisp:nRight:=CooDisp:nLeft+Ancho //Ajusta el ancho del espacio disponible segun el nuevo espacio disponible
oImage:SETCOORS(CooDisp) //Asigna las nuevas coordenadas al espacio para la imagen
RETURN(oBmp)Espero le sirva a alguien. +Salu2