DUVIDA EM CONVERSAO DE IMAGENS PARA ARRAY BYTES

THIELES 17/08/2012 23:24:22
#408125
Boa noite a todos,
Nos ultimos dias andei pesquisando sobre o assunto de conversão de imagens em um vetor do tipo binario. Tenho algumas dúvidas em questão na utilização do objeto ADODB mystrean, esse e o código que uso para mostrar a imagem no objeto. Já estava esquecendo de dizer que esse e o primeiro projeto que estou criando. A minha intenção e criar uma função para dar opção de salvar no banco e logo após irei cria outra para direcionar um diretorio.

Private Sub cmdInFoto_Click()
Dim Arquivo As String

On Error GoTo ERRADO
dlgFoto_cdf.ShowOpen [ô] objeto commondialog
dlgFoto_cdf.Filter = [Ô]Figuras (*.bmp; *.gif; *.jpg)|*.bmp; *.gif; *.jpg|Todos od Arquivos (*.*)|*.*[Ô] [ô] Filtros para o commondialog visualizar
If dlgFoto_cdf.FileName <> [Ô][Ô] Then
imgfoto_Fun.Picture = LoadPicture(dlgFoto_cdf.FileName) [ô]faz com que o objeto picture carrege e mostre a imagem na tela.
Arquivo = dlgFoto_cdf.FileName [ô]Add a imagem a uma variavel
lblCaminho_cdf = Arquivo [ô] teste de funcionamento no momento de execução.

End If
Exit Sub
ERRADO:
With Err
If .Number <> 0 Then
MsgBox Err.Description, vbCritical + vbOKOnly + vbApplicationModal, [Ô]Erro Salvar Foto.[Ô]
.Number = 0
[ô]Set Arquivo = Nothing
End If
End With

End Sub

Desde já agradeço a todos.[txt-size=2] [/txt-size]
PROFESSOR 18/08/2012 23:45:22
#408142
Resposta escolhida
Não ficou claro: O que você precisa é de uma função que permita gerar a matriz de bytes para posteriormente gravar em base de dados, uma função que converta o arquivo em matriz de bytes e já a grave na base de dados, um exemplo de uso do componente ADODB.Stream ou nenhuma das anteriores?

Ainda assim, há uns bons anos atrás, eu costumava usar desta forma: Num módulo comum, duas funções mais ou menos como:

[ô]Passe á esta função pública:
[ô]1 - o Recordset já posicionado no registro desejado,
[ô]2 - um picturebox para mostrar a imagem,
[ô]3 - o nome da pasta usada para armazenar arquivos temporários,
[ô]4 - o nome do campo que contém a imagem (tipo IMAGE, BLOB ou VARBINARY etc),
[ô]5 - opcionalmente, se deve mostrar mensagem de erro, se ocorrer algum.
Public Function ImagemDoRecordset(ByVal parRecordset As ADODB.Recordset, _
ByRef parPictureBox As PictureBox, _
ByVal parPastaTemporaria As String, _
ByVal parCampo As String, _
Optional mostrarErros As Boolean = False) As Boolean
On Error GoTo hell:
Dim ret As Boolean
Dim stm As ADODB.Stream
Dim arquivoTemporario As String
pastatemporaria = Trim$(pastatemporaria)
If (Right$(pastatemporaria, 1) <> [Ô]\[Ô]) Then
pastatemporaria = pastatemporaria & [Ô]\[Ô]
End If
If (Dir(pastatemporaria, vbDirectory) <> [Ô][Ô]) Then
If (Not parRecordset Is Nothing) Then
arquivoTemporario = pastatemporaria & [Ô]tmp.bmp[Ô]
Set stm = New ADODB.Stream
stm.Type = adTypeBinary
stm.Open
Call stm.Write(parRecordset.Fields(Campo).Value)
Call stm.SaveToFile(arquivoTemporario, adSaveCreateOverWrite)
Set parPictureBox.Picture = LoadPicture(arquivoTemporario)
Call Kill(arquivoTemporario)
ret = True
End If
End If
GoTo sai:
hell:
If mostrarErros Then Call MsgBox(Err.Description, vbInformation + vbOKOnly, [Ô]Falha[Ô])
Err.Clear
ret = False
sai:
ImagemDoRecordset = ret
End Function


[ô]Passe á esta função pública:
[ô]1 - o Recordset já posicionado no registro desejado,ou onde será adicionado um novo registro,
[ô]2 - o caminho/nome do arquivo de imagem,
[ô]3 - o nome do campo que contém a imagem (tipo IMAGE, BLOB ou VARBINARY etc),
[ô]4 - opcionalmente, se deve adicionar um registro (True, padrão) ou atualizar o atual (False),
[ô]5 - opcionalmente, se deve mostrar mensagem de erro, se ocorrer algum.
Public Function ImagemNoRecordset(ByVal parRecordset As ADODB.Recordset, _
ByVal parArquivoDeImagem As String, _
ByVal parCampo As String, _
Optional ByVal adicionarRegistro As Boolean = True, _
Optional mostrarErros As Boolean = False) As Boolean
On Error GoTo hell:
Dim ret As Boolean
Dim pct As StdPicture
If (Dir(parArquivoDeImagem) <> [Ô][Ô]) Then
Set pct = LoadPicture(parArquivoDeImagem)
If (Not pct Is Nothing) Then
If (adicionarRegistro = True) Then
parRecordset.AddNew
End If
Set strStream = New ADODB.Stream
strStream.Type = adTypeBinary
strStream.Open
Call strStream.LoadFromFile(parArquivoDeImagem)
parRecordset.Fields(parCampo).Value = strStream.Read
ret = True
End If
End If
GoTo sai:
hell:
If mostrarErros Then Call MsgBox(Err.Description, vbInformation + vbOKOnly, [Ô]Falha[Ô])
Err.Clear
ret = False
sai:
ImagemNoRecordset = ret
End Function
THIELES 23/08/2012 13:57:12
#408459
Obrigado por responder.
Teria como vc explicar o topico [ô]3 - o nome da pasta usada para armazenar arquivos temporários.

Pois essa não achei nada na net informando essa função no vb e era uma das minhas dúvidas tambem.

MARCELO.TREZE 23/08/2012 14:07:15
#408461
ele quiz dizer pra você informar na função:

c:    emp [txt-color=#007100][ô]<o nome da pasta usada para armazenar arquivos temporários.[/txt-color]


por exemplo
THIELES 30/08/2012 20:22:43
#408974
Obrigado a todos irei fechar o tópico e pontuar se der para pontuar os 2 vou fazer.
Tópico encerrado , respostas não são mais permitidas