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!
loadFromString() -> Modifications!
loadFromString() -> Modifications!
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
Júlio César M. Ferreira
FWH 8.10 / xHB 1.1.0 / xDevStudio 0.72 / Pelles C 5.0.1 / SQLLIB 1.9
olá,
vc pode usar desta forma também...
um abraço
vc pode usar desta forma também...
Code: Select all
#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
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.
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
Júlio César M. Ferreira
FWH 8.10 / xHB 1.1.0 / xDevStudio 0.72 / Pelles C 5.0.1 / SQLLIB 1.9
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:
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:
e depois de encerrar o dialogo deletar o arq temp
espero q te ajude
um abraço
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
#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
no exemplo, estou somente visualizando, mas se eu precisar exibi-la em uma dialog por exemplo, seria somente fazer:
Code: Select all
01,01 IMAGE oImage FILANEM cTemp2 SIZE 100,50 OF oTela , etc, etc,
espero q te ajude
um abraço