loadFromString() -> Modifications!

loadFromString() -> Modifications!

Postby JC » Thu Apr 24, 2008 6:23 pm

Linares... your method loadFromString() was a perfect solution for my problems!

Exists a way to use this same method but now, to open a image different that .bmp? For example, a .jpg or .gif image?

Something using a CreateMemFile() ... ?? Or some else!!

Thanks!
Peace and lighting!

Júlio César M. Ferreira

FWH 8.10 / xHB 1.1.0 / xDevStudio 0.72 / Pelles C 5.0.1 / SQLLIB 1.9
User avatar
JC
 
Posts: 445
Joined: Thu Feb 21, 2008 11:58 am
Location: Brazil

Postby yury » Fri Apr 25, 2008 2:44 pm

olá,

vc pode usar desta forma também...

Code: Select all  Expand view  RUN
#include "fivewin.ch"


Function Teste()


cFileBmp = cGetFile("*.bmp")
cFileJpg = cGetFile("*.jpg")
cFileGif = cGetFile("*.gif")


cEncBmp = 'c:\temp\memo_bmp.tmp'
cEncJpg = 'c:\temp\memo_jpg.tmp'
cEncGif = 'c:\temp\memo_gif.tmp'


FMimeEnc(cFileBmp,cEncBmp)
FMimeEnc(cFileJpg,cEncJpg)
FMimeEnc(cFileGif,cEncGif)


cTmpFileBmp = 'c:\temp\bmplida.bmp'
cTmpFileJpg = 'c:\temp\jpglida.jpg'
cTmpFileGif = 'c:\temp\giflida.jpg'


FMimeDec(cEncBmp,cTmpFileBmp)
FMimeDec(cEncJpg,cTmpFileJpg)
FMimeDec(cEncGif,cTmpFileGif)


msginfo( 'OK !' )


return


um abraço
Yury Marcelino Al
yury030575@yahoo.com.br
vimansca@vimansca.com.br
Leme / SP - Brasil
yury
 
Posts: 56
Joined: Wed May 23, 2007 2:01 pm

Postby JC » Fri Apr 25, 2008 2:47 pm

Yuri... valeu pela resposta... mas não compreendi muito bem oq tu quis dizer!

Na verdade a situação é a seguinte: Uma imagem é gravada no banco de dados, em um campo BLOB.
Com o método loadFromString() que Linares implementou, é possível carregar essa imagem diretamente do banco, sem a necessidade de criá-la em disco.

Mas isso funciona para arquivos bitmap. Gostaria do mesmo para quaisquer tipos de imagem, ou, pelo menos, para bitmap, jpeg e gif.
Peace and lighting!

Júlio César M. Ferreira

FWH 8.10 / xHB 1.1.0 / xDevStudio 0.72 / Pelles C 5.0.1 / SQLLIB 1.9
User avatar
JC
 
Posts: 445
Joined: Thu Feb 21, 2008 11:58 am
Location: Brazil

Postby yury » Fri Apr 25, 2008 5:46 pm

olá Julio,

desculpe, eu deveria ter sido mais claro...

eu gravo imagens em arquivo tipo Memo, que seriam os "equivalentes" aos BLOBs e faço desta forma, onde a imagem é criada no disco somente temporariamente, sendo deletada depois (não vi o método LoadFromString, mas tenho quase certeza que ele cria um arquivo temporário no disco para depois deletá-lo)

veja este exemplo:



Code: Select all  Expand view  RUN
#include "fivewin.ch"

Function Teste()

local cFileDbf := 'c:\temp\Dados.DBF'
local aEstr    := {{"cNome","C",30,00},;
                   {"cExte","C",05,00},;
                   {"mImag","M",10,00} }

if .not.file(cFileDbf)
   DBCREATE(cFileDbf,aEstr,'DBFNTX',.T.,'temp')
else
   DBUSEAREA(.T.,'DBFNTX',cFileDbf,'temp',.F.)
endif

if neterr()
   ? 'Erro ao abrir arquivo '+cFileDbf
   return
endif

SELECT temp

while .t.
   nOpc=ALERT('Selecione a opção:',{'Gravar Imagens','Ler Imagens gravadas'},'Opções:')

   if nOpc<1
      close all
      return
   endif

   if nOpc=1
      oTela=nil
      oNome=nil
      lSalva=.F.

      memvar->cNome=SPACE(30)

      cPath=cGetFile("*.jpg",'Selecione a imagem desejada')

      if .not.file(cPath)
         close all
         return
      endif

      define dialog oTela from 01,01 to 20,60 title 'Gravando imagem em Memo'

      @ 01,01 say 'Imagem:' OF oTela COLOR CLR_BLACK
      @ 01,06 say cPath OF oTela COLOR CLR_HBLUE

      @ 03,01 say 'Digite o nome para imagem:' of oTela COLOR CLR_BLACK
      @ 4.5,01 get oNome VAR memvar->cNome of oTela
   
      @ 05,01 button 'Gravar' of oTela size 50,12 action (lSalva:=.t.,oTela:End()) CANCEL
   
      activate dialog oTela centered
      
      if .not.lSalva
         loop
      endif
   
      cTemp = 'c:\temp\temp001.tmp'
      
      FMimeEnc(cPath,cTemp)
     
      if file(cTemp)
         cMemo=memoread(cTemp)
         cMemo=STRTRAN(cMemo,CRLF,'')
         temp->(DBAPPEND())
         REPLACE temp->cNome with memvar->cNome
         REPLACE temp->cExte with cFileExt(cPath)
         REPLACE temp->mImag with cMemo
         ferase(cTemp)
         msginfo('Imagem salva com sucesso !')
      else
         ? 'Imagem não pode ser salva !'
      endif   
   else
      oTela=nil
      oNome=nil
      oImage=nil
      lSalva=.F.

      memvar->cNome=SPACE(30)

      define dialog oTela from 01,01 to 20,60 title 'Lendo imagem em Memo'

      @ 01,01 say 'Digite o nome para imagem:' of oTela COLOR CLR_BLACK
      @ 2.5,01 get oNome VAR memvar->cNome of oTela
   
      @ 05,01 button 'Ler' of oTela size 50,12 action (lSalva:=.t.,oTela:End()) CANCEL
   
      activate dialog oTela centered
      
      if .not.lSalva
         loop
      endif
     
      cMemo=''
      memvar->cExte=''
      
      temp->(dbgotop())
      while .not.temp->(eof())
         if ALLTRIM(UPPER(temp->cNome)) == ALLTRIM(UPPER(memvar->cNome))
            cMemo=temp->mImag
            memvar->cExte=ALLTRIM(temp->cExte)
         endif
         temp->(dbskip())
      enddo   
      
      if empty(cMemo)
         ? 'Arquivo não contém imagem com este nome !'
         loop
      endif
      
      cTemp = 'c:\temp\temp002.tmp'
      
      MEMOWRIT(cTemp,cMemo)
      
      if file(cTemp)
          
         cTemp2 = 'c:\temp\temp003.'+memvar->cExte
         
         FMimeDec(cTemp,cTemp2)
         
         if file(cTemp2)
            ferase(cTemp)
            ShellExecute(GetActiveWindow(),"open",cTemp2)
            msginfo('Tecle algo para ler outra imagem','OK')
            ferase(cTemp2)
         else
            ? 'Imagem não pode ser lida  !'
         endif
      else
         ? 'Imagem não pode ser lida  !'
      endif   
   endif   
enddo      

return 


desta forma a imagem (qualquer extensão) está contida no campo MEMO do arquivo, certo ? quando eu precisar utilizá-la eu a salvo em um arquivo temp e realizo os procedimentos desejados...

no exemplo, estou somente visualizando, mas se eu precisar exibi-la em uma dialog por exemplo, seria somente fazer:

Code: Select all  Expand view  RUN
01,01 IMAGE oImage FILANEM cTemp2 SIZE 100,50 OF oTela , etc, etc,


e depois de encerrar o dialogo deletar o arq temp

espero q te ajude

um abraço
Yury Marcelino Al
yury030575@yahoo.com.br
vimansca@vimansca.com.br
Leme / SP - Brasil
yury
 
Posts: 56
Joined: Wed May 23, 2007 2:01 pm


Return to FiveWin for Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 63 guests