porque algo facil se convierte en una pesadilla...

Post Reply
User avatar
QAZWSX2K
Posts: 359
Joined: Tue Oct 25, 2005 7:06 pm
Location: Bogota - Caracas

porque algo facil se convierte en una pesadilla...

Post by QAZWSX2K »

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
User avatar
jll-fwh
Posts: 385
Joined: Fri Jan 29, 2010 8:14 pm
Location: Meliana - Valencia
Contact:

Re: porque algo facil se convierte en una pesadilla...

Post by jll-fwh »

QAZWSX2K;

Para usar JPG necesitas usar la clase TImage No TBitmap.

Code: Select all

    @ ::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 3.1.1 + Borland C++ 5.8.2
Editor de Recursos: PellecC
ADA + OURXDBU -
S.O: XP / Win 7
Blog: http://javierlloris.blogspot.com.es/
e-mail: jllorispersonal@gmail.com
User avatar
leandro
Posts: 958
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia
Contact:

Re: porque algo facil se convierte en una pesadilla...

Post by leandro »

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: Select all


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 ALFONSO
SISTEMAS LYMA - BASE
Bogotá (Colombia)
[ FWH 19.09 ] [ xHarbour 1.2.3 Intl. (SimpLex) (Build 20190613) ] [ Embarcadero C++ 7.30 for Win32 ]
Francisco Horta
Posts: 845
Joined: Sun Oct 09, 2005 5:36 pm
Location: la laguna, mexico.

Re: porque algo facil se convierte en una pesadilla...

Post by Francisco Horta »

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
AndresRomero
Posts: 11
Joined: Fri Nov 20, 2009 11:07 am

Re: porque algo facil se convierte en una pesadilla...

Post by AndresRomero »

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/viewt ... =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.
User avatar
Daniel Garcia-Gil
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita
Contact:

Re: porque algo facil se convierte en una pesadilla...

Post by Daniel Garcia-Gil »

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
Image

imagen PNG
Image

imagen GIF
Image
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
User avatar
QAZWSX2K
Posts: 359
Joined: Tue Oct 25, 2005 7:06 pm
Location: Bogota - Caracas

Re: porque algo facil se convierte en una pesadilla...

Post by QAZWSX2K »

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
AndresRomero
Posts: 11
Joined: Fri Nov 20, 2009 11:07 am

Re: porque algo facil se convierte en una pesadilla...

Post by AndresRomero »

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: Select all


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.
User avatar
jll-fwh
Posts: 385
Joined: Fri Jan 29, 2010 8:14 pm
Location: Meliana - Valencia
Contact:

Re: porque algo facil se convierte en una pesadilla...

Post by jll-fwh »

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 3.1.1 + Borland C++ 5.8.2
Editor de Recursos: PellecC
ADA + OURXDBU -
S.O: XP / Win 7
Blog: http://javierlloris.blogspot.com.es/
e-mail: jllorispersonal@gmail.com
Post Reply