FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Ajustar una imagen al espacio definido en oImage SOLUCIONADO
Posts: 257
Joined: Tue May 16, 2006 04:46 PM
Ajustar una imagen al espacio definido en oImage SOLUCIONADO
Posted: Tue Feb 15, 2011 03:09 AM
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):

Code (fw): Select all Collapse
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
RodolfoRBG
FWH 1307, xHarbour123 BCC582
rodolfoerbg@gmail.com
Posts: 8523
Joined: Tue Dec 20, 2005 07:36 PM
Re: Ajustar una imagen al espacio definido en oImage SOLUCIONADO
Posted: Wed Feb 16, 2011 03:27 PM
Hola, mira se asi te funciona.

Code (fw): Select all Collapse
       REDEFINE IMAGE oImagem ID 201       ;
                OF oFld:aDialogs[2]        ;
                FILENAME DbClientes:Fotos  ;
                UPDATE   CURSOR  oHand
                
       oImagem:Progress( .F. )
       oImagem:lStretch := ( .T. ) // .T. o .F.
       oImagem:Refresh()


Salu2

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341

Continue the discussion