FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour porque algo facil se convierte en una pesadilla...
Posts: 364
Joined: Tue Oct 25, 2005 07:06 PM
porque algo facil se convierte en una pesadilla...
Posted: Mon Oct 31, 2011 01:15 PM

saludos amigos, no entiendo porque algo tan sencillo lo hace a uno perder horas de leer foros y nada

  • como hago visualizar en un dialogo una foto pero NO bmp sino JPG, he visto que solo cambiandole la extension a la instruccion se supone el freeimage la convierte automaticamente pero no muestra nada y me inhibi el dialogo, no me deja darle salir ni nada

@ 13,252 BITMAP OBMP FILENAME IF (FILE(DIREF+ALLTRIM(TCODIGO)+".JPG"),DIREF+ALLTRIM(TCODIGO)+".JPG",DIREF+"SINFOTO.JPG") SIZE 120,140 PIXEL OF DIALOGO ADJUST

originalmente con bmp todo sale perfecto pero en un directorio con 4000 fotos ya es cuestion de tama帽o en disco, por eso se necesita jpg

1.- 驴se necesita declarar el freeimage.dll o incluir un ch, o no se?,

asi mismo si dejo que el usuario seleccione la foto con una ventanita de explorardor:

2.- 驴existe una manera de que yo pueda hacerce un resize a la imagen y guardarla a ese tama帽o por ejemplo de 160x120 ya que ahora cualquier persona tiene una camarita de 10mp y son fotos de 4000x4000, osea que la foto quede ya de ese tama帽o ojo no con el adjust al verla sino que quede guardada al tama帽o deseado para liberar mas espacio aun?

gracias
alejandro

Software especializado para oficinas contables con grandes volumenes de Informacion
Impresion de todos los formularios del Seniat, Dian

alex_patino74@hotmail.com
whatsapp 57+3214777217
Posts: 408
Joined: Fri Jan 29, 2010 08:14 PM
Re: porque algo facil se convierte en una pesadilla...
Posted: Mon Oct 31, 2011 01:36 PM
QAZWSX2K;

Para usar JPG necesitas usar la clase TImage No TBitmap.
Code (fw): Select all Collapse
 聽 聽@ ::oDlg:nTop+25,0 IMAGE ::oImage FILENAME ::cFile NOBORDER;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽SIZE ::oDlg:nWidth, ::oDlg:nHeight;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽OF ::oDlg ADJUST PIXEL


Aqu铆 ahora mismo no tengo los fuentes de las clases, pero mira la clase TImage que sino recuerdo mal, tienes un metodo saveImage() o algo as铆, y tambi茅n hab铆a unas funciones para guardar el archivo en otros formatos y tama帽o.

Un saludo
JLL
Libreria: FWH/FWH1109 + Harbour 5.8.2 + Borland C++ 5.8.2
Editor de Recursos: PellecC
ADA, OURXDBU
S.O: XP / Win 7 /Win10
Blog: http://javierlloris.blogspot.com.es/
e-mail: javierllorisprogramador@gmail.com
Posts: 1816
Joined: Wed Oct 26, 2005 02:49 PM
Re: porque algo facil se convierte en una pesadilla...
Posted: Mon Oct 31, 2011 06:08 PM
Este ejemplo me funciona a la perfeccion.... aqui hay una parte del codigo si lo necesitas completo con gusto te lo mando al mail
Code (fw): Select all Collapse
DEFINE DIALOG oCuaJug RESOURCE "orMedid9" ICON "#8001" //TRANSPARENT BRUSH oFondo

聽 REDEFINE IMAGE oImg ID 4004 OF oCuaJug ADJUST SCROLL //FILE ( cFichero )
聽 oImg:Progress( .f. )

聽 REDEFINE BUTTONBMP Btn_Limp ID 4003 OF oCuaJug BITMAP "Blimpi2" 

聽 oBrw1 := TXBrowse():New( oCuaJug )

聽 oBrw1:nMarqueeStyle 聽 聽 聽 := MARQSTYLE_HIGHLCELL //MARQSTYLE_HIGHLROW
聽 oBrw1:nColDividerStyle 聽 聽:= LINESTYLE_RAISED
聽 oBrw1:nHeaderLines 聽 聽 聽 聽:= 1
聽 oBrw1:lColDividerComplete := .t.
聽 oBrw1:lRecordSelector 聽 聽 := .t.
聽 oBrw1:bClrStd 聽 聽 聽 聽 := {|| IF( (oRs1:AbsolutePosition()%2)==0,{CLR_BLACK,RGB(193,221,255)},{CLR_BLACK,RGB(221,245,255)} ) }
聽 oBrw1:bChange 聽 聽 聽 聽 := {|| prueba(oImg) }

聽 aCol[ 1] 聽 聽 聽 聽 聽 聽 聽 聽 聽 := oBrw1:AddCol()
聽 aCol[ 1]:bStrData 聽 聽 聽 聽 聽:= { || If( oRs1:Eof, Space( nWidth ), cValtoChar( oRs1:Fields( "cedula" ):Value ) ) }
聽 aCol[ 1]:cHeader 聽 聽 聽 聽 聽 := "Cedula"
聽 aCol[ 1]:nHeadStrAlign 聽 聽 := AL_LEFT
聽 aCol[ 1]:nDataStrAlign 聽 聽 := AL_LEFT
聽 aCol[ 1]:nWidth 聽 聽 聽 聽 聽 聽:= 90

聽 aCol[ 2] 聽 聽 聽 聽 聽 聽 聽 聽 聽 := oBrw1:AddCol()
聽 aCol[ 2]:bStrData 聽 聽 聽 聽 聽:= { || If( oRs1:Eof, Space( nWidth ), cValtoChar( oRs1:Fields( "nombre" ):Value ) ) }
聽 aCol[ 2]:cHeader 聽 聽 聽 聽 聽 聽:= "Nombres"
聽 aCol[ 2]:nHeadStrAlign 聽 聽 := AL_LEFT
聽 aCol[ 2]:nDataStrAlign 聽 聽 := AL_LEFT
聽 aCol[ 2]:nWidth 聽 聽 聽 聽 聽 聽:= 150

聽 aCol[ 3] 聽 聽 聽 聽 聽 聽 聽 聽 聽 := oBrw1:AddCol()
聽 aCol[ 3]:bStrData 聽 聽 聽 聽 聽:= { || If( oRs1:Eof, Space( nWidth ), cValtoChar( oRs1:Fields( "apellidos" ):Value ) ) }
聽 aCol[ 3]:cHeader 聽 聽 聽 聽 聽 聽:= "Apellidos"
聽 aCol[ 3]:nHeadStrAlign 聽 聽 := AL_LEFT
聽 aCol[ 3]:nDataStrAlign 聽 聽 := AL_LEFT
聽 aCol[ 3]:nWidth 聽 聽 聽 聽 聽 聽:= 150

聽 aCol[ 4] 聽 聽 聽 聽 聽 聽 聽 聽 聽 := oBrw1:AddCol()
聽 aCol[ 4]:bStrData 聽 聽 聽 聽 聽:= { || If( oRs1:Eof, Space( nWidth ), cValtoChar( oRs1:Fields( "telefono" ):Value ) ) }
聽 aCol[ 4]:cHeader 聽 聽 聽 聽 聽 := "Telefono"
聽 aCol[ 4]:nHeadStrAlign 聽 聽 := AL_LEFT
聽 aCol[ 4]:nDataStrAlign 聽 聽 := AL_LEFT
聽 aCol[ 4]:nWidth 聽 聽 聽 聽 聽 聽:= 81

聽 aCol[ 5] 聽 聽 聽 聽 聽 聽 聽 聽 聽 := oBrw1:AddCol()
聽 aCol[ 5]:bStrData 聽 聽 聽 聽 聽:= { || If( oRs1:Eof, Space( nWidth ), cValtoChar( oRs1:Fields( "email" ):Value ) ) }
聽 aCol[ 5]:cHeader 聽 聽 聽 聽 聽 := "E-mail"
聽 aCol[ 5]:nHeadStrAlign 聽 聽 := AL_LEFT
聽 aCol[ 5]:nDataStrAlign 聽 聽 := AL_LEFT
聽 aCol[ 5]:nWidth 聽 聽 聽 聽 聽 聽:= 200

聽 aCol[ 6] 聽 聽 聽 聽 聽 聽 聽 聽 聽 := oBrw1:AddCol()
聽 aCol[ 6]:bStrData 聽 聽 聽 聽 聽:= { || If( oRs1:Eof, Space( nWidth ), cValtoChar( oRs1:Fields( "promocion" ):Value ) ) }
聽 aCol[ 6]:cHeader 聽 聽 聽 聽 聽 := "Prom"
聽 aCol[ 6]:nHeadStrAlign 聽 聽 := AL_LEFT
聽 aCol[ 6]:nDataStrAlign 聽 聽 := AL_LEFT
聽 aCol[ 6]:nWidth 聽 聽 聽 聽 聽 聽:= 50

聽 aCol[ 7] 聽 聽 聽 聽 聽 聽 聽 聽 聽 := oBrw1:AddCol()
聽 aCol[ 7]:bStrData 聽 聽 聽 聽 聽:= { || If( oRs1:Eof, Space( nWidth ), cValtoChar( oRs1:Fields( "profesion" ):Value ) ) }
聽 aCol[ 7]:cHeader 聽 聽 聽 聽 聽 := "Profesion"
聽 aCol[ 7]:nHeadStrAlign 聽 聽 := AL_LEFT
聽 aCol[ 7]:nDataStrAlign 聽 聽 := AL_LEFT
聽 aCol[ 7]:nWidth 聽 聽 聽 聽 聽 聽:= 190

聽 aCol[ 8] 聽 聽 聽 聽 聽 聽 聽 聽 聽 := oBrw1:AddCol()
聽 aCol[ 8]:bStrData 聽 聽 聽 聽 聽:= { || pRegBar05(cValtoChar( oRs1:Fields( "carnet" ):Value ) ) }
聽 aCol[ 8]:cHeader 聽 聽 聽 聽 聽 聽:= "Carnet No."
聽 aCol[ 8]:nHeadStrAlign 聽 聽 := AL_LEFT
聽 aCol[ 8]:nDataStrAlign 聽 聽 := AL_LEFT
聽 aCol[ 8]:nWidth 聽 聽 聽 聽 聽 聽:= 70
聽 aCol[ 8]:nEditType 聽 聽 聽 聽 := EDIT_GET
聽 aCol[ 8]:bOnPostEdit 聽 聽 聽 := {|o, v| pRegBar06(v,oRs1:Fields( "cedula" ):Value,oBrw1,alias) }


聽 oBrw1:SetADO( oRs1 )
聽 oBrw1:CreateFromResource( 102 )

聽 oCuaJug:cTitle := "Jugadores Inscritos"

ACTIVATE DIALOG oCuaJug 聽On Init (oCuaJug:refresh(),BarraJug( oCuaJug,oBrw1 ),prueba(oImg)) CENTERED 


*******************************************
*MOSTRAR LA FOTO Y SI NO EXISTE LO DESCARGA
*******************************************
function prueba(oImg)
local oInternet,oFTP
ncedula:=oRs1:Fields( "cedula" ):Value
rutalocal:=".\fotos\"+alltrim(ncedula)+".jpg"
rutaserve:="/public_html/fotos/"+alltrim(ncedula)+".jpg"
IF !FILE (rutalocal)
聽 oInternet := TInternet():New()
聽 oFTP := TFTP():New( "ftp.mipagina.com", oInternet, "usuario","Clave" )
聽 Ftpgetfile( oFTP:hFTP,rutaserve,rutalocal )
聽 oInternet:End()
聽 IF !FILE (rutalocal)
聽 聽 oImg:LoadBmp( ".\fotos\noimagen.jpg" )
聽 聽 oImg:Refresh()
聽 ELSE
聽 聽 oImg:LoadBmp( rutalocal )
聽 聽 oImg:Refresh()
聽 ENDIF
ELSE
聽 oImg:LoadBmp( rutalocal )
聽 oImg:Refresh()
ENDIF


Espero sea lo que necesitas
Saludos
LEANDRO AREVALO
Bogot谩 (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 25.01 ] [ xHarbour 64 bits) ]
Posts: 845
Joined: Sun Oct 09, 2005 05:36 PM
Re: porque algo facil se convierte en una pesadilla...
Posted: Tue Nov 01, 2011 07:58 PM

alejandro,

entiendo que si lo que buscas es cargar imagenes .jpg yo lo hago asi
REDEFINE IMAGE oImage ID 101 FILE ".\bitmaps\logo.jpg" OF oDlg ADJUST UPDATE
y la freeimage.dll debe estar donde esta tu .exe
me va bien
salu2
paco

____________________

Paco
Posts: 11
Joined: Fri Nov 20, 2009 11:07 AM
Re: porque algo facil se convierte en una pesadilla...
Posted: Wed Nov 02, 2011 07:59 PM
El 13 de octubre, no hace un mes, coment茅 en este foro el mismo problema, como puedes ver en este enlace

http://forums.fivetechsupport.com/viewtopic.php?f=6&t=22637

Despu茅s de darle muchas vueltas, y a la falta de contestaci贸n por parte de nadie seguimos investigando. La conclusi贸n, como digo en el enlace anterior, es la siguiente:

1.- La clase TImagen, heredada de TBitMap, tiene una funci贸n distinta para los BMP que para los dem谩s. Los BMP's utilizan una funci贸n de 驴Windows? y funciona perfectamente, pero cuando se da cuenta que tiene extensi贸n NO BMP, no entra a la funci贸n y continua hacia freeimagen. ES LA LLAMADA A FREEIMAGEN la que no me funciona.

2.- La primera instrucci贸n solicitada a la DLL es que nos de el tipo de fichero (independientemente de la extenxi贸n), para JPG debe devolver 2 y devuelve NIL.

3.- Si a la siguiente instrucci贸n le ponemos a mano el tipo 2, tambi茅n devuelve NIL.

4.- Pensando que es la llamada a freeimagen, hago pruebas con enlaces FTP que tambi茅n utiliza una DLL. Sorpresa TAMPOCO FUNCIONA.

5.- En la versi贸n anterior la 7.x SI me funciona. En la versi贸n 9.x NO FUNCIONA el enlace con las DLL's que tienen en la llamada "DLL32 etc". 驴 Que hay que hacer en el programa para que si funcione ?.

A ver si siendo varios, nos tienen en cuenta :-)

Si encuentras la soluci贸n, por favor dimelo.
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 PM
Re: porque algo facil se convierte en una pesadilla...
Posted: Wed Nov 02, 2011 10:17 PM
Hola

he construido, con la version 9.10, sin problemas el ejemplo testimg.prg

te dejo el link de descarga donde se incluye el prg, exe y dll

podrias publicar un ejemplo que podamos construir para reproducir el error...
gracias

http://www.sitasoft.net/fivewin/samples/testimg.zip

imagen JPG


imagen PNG


imagen GIF
Posts: 364
Joined: Tue Oct 25, 2005 07:06 PM
Re: porque algo facil se convierte en una pesadilla...
Posted: Thu Nov 03, 2011 11:24 AM

si amigos gracias, efectivamente aunque habia probado con timage en un momento no me sirvio, es con timagen y no con bitmap como dice JLL y los demas, ya funciona perfecto, el problema era que tenia un freeimage de la epoca de maria casta帽as (menos de 1 mega), pensaba era parte de fivewin, asi que actualize el freeimage y con timage todo perfecto

otra cosita leandro veo que usas oFTP := TFTP():New( "ftp.mipagina.com", oInternet, "usuario","Clave" ), como haces para que no te genere los archivos log que crea ftp (en donde si los ves pone la clave y todo, son archivos planos y son ftp.log,ftp1.log,ftp2.log y asi sucesivamente te llena el disco duro de esos log y cualquier mortal los puede ver)

gracias a todos

Software especializado para oficinas contables con grandes volumenes de Informacion
Impresion de todos los formularios del Seniat, Dian

alex_patino74@hotmail.com
whatsapp 57+3214777217
Posts: 11
Joined: Fri Nov 20, 2009 11:07 AM
Re: porque algo facil se convierte en una pesadilla...
Posted: Thu Nov 03, 2011 12:39 PM
Siento tener que insister, perdonarme.

Daniel,

1.- El ejecutable que me mandas compilado funciona perfectamente, lo cual nos dice entre otras cosas que la dll es correcta.
2.- He probado compilando el fuente que me mandas, pero con mis ficheros de FW y xHarbour. Con freeimage.dll que me mandas SIGUE SIN FUNCIONAR.

Yo orientaria el problema al enlace dentro de TImage, que hace a la DLL. Te pongo la funci贸n y te indico donde me pasa que devuelve NIL en lugar de valores correctos. 驴No ser谩 el problema el enlace con la DLL? (La dll esta donde el ejecutable, naturalmente):

Code (fw): Select all Collapse
function FILOADIMG( cFile, nFormat )

聽 聽local hDib, hInfoH, hInfo, hBits, hWnd, hDC, hBmp

聽 聽if Upper( cFileExt( cFile ) ) = "BMP"
聽 聽 聽 return ReadBitmap( 0, cFile ) 聽 聽 聽 聽 聽 聽 // si es BMP, funciona perfectamente
聽 聽endif

聽 聽if LoadFreeImage() > 32

////////////////////////////////////////////////////////////////////////////////////////////////
聽 聽 聽 nFormat = FIGETFILETYPE( cFile, 0 ) 聽 聽 聽 // aqui me devuelve NIL
聽 聽 聽 hDib 聽 聽= FILOAD( nFormat, cFile, 0 ) 聽 聽 // si pongo nFormat=2, tambien me devuelve NIL
////////////////////////////////////////////////////////////////////////////////////////////////
聽 聽 聽 hInfoH 聽= FIGETINFOHEADER( hDib )
聽 聽 聽 hInfo 聽 = FIGETINFO( hDib )
聽 聽 聽 hBits 聽 = FIGETBITS( hDib )
聽 聽 聽 hWnd 聽 聽= GETDESKTOPWINDOW()

聽 聽 聽 #ifdef __CLIPPER__
聽 聽 聽 聽 聽hDC = GETDC32( hWnd )
聽 聽 聽 #else
聽 聽 聽 聽 hDC = GETDC( hWnd )
聽 聽 聽 #endif

聽 聽 聽 hBmp = CreateDiBitmap( hDC, hInfoH, CBM_INIT, hBits, hInfo, DIB_RGB_COLORS )

聽 聽 聽 ReleaseDC( hWnd, hDC )
聽 聽 聽 FIUNLOAD( hDib )

聽 聽endif

return hBmp


Si no lo necesitase, de verdad, no os molestar铆a.
Un saludo.
Posts: 408
Joined: Fri Jan 29, 2010 08:14 PM
Re: porque algo facil se convierte en una pesadilla...
Posted: Thu Nov 03, 2011 07:25 PM
QAZWSX2K;

otra cosita leandro veo que usas oFTP := TFTP():New( "ftp.mipagina.com", oInternet, "usuario","Clave" ), como haces para que no te genere los archivos log que crea ftp (en donde si los ves pone la clave y todo, son archivos planos y son ftp.log,ftp1.log,ftp2.log y asi sucesivamente te llena el disco duro de esos log y cualquier mortal los puede ver)


Sino recuerdo mal los ficheros que creaban los .log lo hacia la clase TFtpServer, tienes dos formas:

1.- La facil y rapida, una vez finalice la conexion, recuperas con Directorio() todos esos ficheros y los borras.
2.- Modificas la clase para que no guarde esa informaci贸n. Yo har铆a la 1 opci贸n.

Un saluod
JLL
Libreria: FWH/FWH1109 + Harbour 5.8.2 + Borland C++ 5.8.2
Editor de Recursos: PellecC
ADA, OURXDBU
S.O: XP / Win 7 /Win10
Blog: http://javierlloris.blogspot.com.es/
e-mail: javierllorisprogramador@gmail.com

Continue the discussion