Fórum Alguém sabe como ler imagens da Base de Dados ? #342152
22/05/2007
0
Estou com uma aplicação em Delphi 7 usando como plataforma para o Banco de Dados, o SQL SERVER.
Estou conseguindo armazenar a imagem, porém quando vou lê o campo a imagem está vindo cortada. Descobri que a bronca está no tamanho da imagem. Se eu armazenar uma imagem de até 20Kb, não tem problema ... mas tamanho superior, já corta a imagem. Lógico que não é viável ficar armazenando imagens grandes, mas uma imagem de até 100Kb não vai comprometer minha aplicação não.
ALGUNS DOS COLEGAS DE PROFISSÃO PODERIA ME AJUDAR ?? SABERIA COMO RESOLVO ESSA QUESTÃO DO TAMANHO ??
Segue abaixo a rotina que estou usando no momento. :?
procedure TFrmFuncionario.DSFuncionarioDataChange(Sender: TObject;
Field: TField);
var
CampoBlob:TBlobStream;
ImgJpeg:TJPEGImage;
begin
if QyFuncionarioFoto.AsString <> ´´ Then
begin
CampoBlob := TBlobStream.Create(QyFuncionarioFoto,BmRead);
ImgJpeg := TJPEGImage.Create;
if CampoBlob.Size > 1 then
begin
CampoBlob.Position:=0;
ImgJpeg.LoadFromStream(CampoBlob);
Image1.Picture.Assign(ImgJpeg);
end;
CampoBlob.Free;
ImgJpeg.Free;
end
else
Image1.Picture := nil;
end;
Desde já, agradeço a todos.
Ricardo
Ricvictor
Curtir tópico
+ 0Posts
22/05/2007
Gandalf.nho
Gostei + 0
22/05/2007
Nigro
Gostei + 0
22/05/2007
Ricvictor
Valeu. Um abraço.
Ricardo.
Gostei + 0
22/05/2007
Massuda
Se você quer dizer que apenas parte da imagem aparece, experimente fazer TImage.Stretch = True para forçar a imagem ser do tamanho do TImage (grande chance de distorcer a imagem) ou faça TImage.AutoSize = True para forçar o TImage ser do tamanho da imagem.
Gostei + 0
22/05/2007
Ricvictor
Seguinte ... quando eu gravo a imagem, logo após o post na query, a imagem (foto) que fica me mostrando no TImage está perfeita. Mas quando eu chamo novamente o funcionário, a tela, a imagem que me mostra (a que é colocada) no TImage (de cima pra baixo) preenche com a foto até a metade do TImage. Do meio para baixo fica cinza.
Já deixo setada a propriedade ´Strech´, não distorcendo a imagem na visualização pós gravação, para TRUE.
Fico no aguardo, para saber se você conseguiu entender a minha bronca e assim me ajudar com alguma outra dica.
Valeu msm. Abraço. Ricardo
Gostei + 0
22/05/2007
Gandalf.nho
Gostei + 0
22/05/2007
Ricvictor
É provável também que isto esteja acontecendo sim. A gravação, estou fazendo assim:
procedure TFrmFuncionario.Image1DblClick(Sender: TObject);
var
CampoBlob:TBlobStream;
ImgJpeg:TJPEGImage;
begin
if QyFuncionario.RecordCount > 0 then
begin
Foto.Execute;
if Foto.FileName <> ´´ then
begin
QyFuncionario.Edit;
CampoBlob:= TBlobStream.Create(QyFuncionarioFoto,BmWrite);
ImgJpeg:= TJPEGImage.Create;
ImgJpeg.LoadFromFile(Foto.FileName);
ImgJpeg.SaveToStream(CampoBlob);
Image1.Picture.Assign(ImgJpeg);
CampoBlob.Free;
ImgJpeg.Free;
QyFuncionario.Post;
end;
end
else
MessageDlg(´Não há ainda nenhum funcionário cadastrado.´+#13+
´Cadastramento de foto não disponível.´, mtWarning, [mbOK], 0);
end;
Alguma idéia, caso você esteja certo, para tentarmos solucionar ?
Obrigado. Um abraço. Ricardo
Gostei + 0
22/05/2007
Massuda
Gostei + 0
22/05/2007
Ricvictor
Gostei + 0
23/05/2007
Ricvictor
Estou com uma aplicação em Delphi 7 usando como plataforma para o Banco de Dados, o SQL SERVER. O campo da imagem no BD é do tipo IMAGE.
Estou conseguindo armazenar a imagem, porém quando vou lê o campo a imagem está vindo cortada. Descobri que a bronca está no tamanho da imagem. Se eu armazenar uma imagem de até 20Kb, não tem problema ... mas com tamanho superior, já corta a imagem. Me parece gravar só parte da imagem. Ou seja, a imagem já pode estar sendo gravada cortada ou a bronca é somente na leitura. Em outras palavras, na leitura do campo o TImage só mostra a foto corretamente (de cima pra baixo) só até a metade do TImage. Da metade pra baixo, fica cinza. Lógico que não é viável ficar armazenando imagens grandes, mas uma imagem de até 150Kb não vai comprometer minha aplicação não.
ALGUNS DOS COLEGAS DE PROFISSÃO PODERIA ME AJUDAR ?? SABERIA COMO RESOLVO ESSA QUESTÃO DO TAMANHO ??
Segue abaixo as rotinas de leitura e gravação da imagem no BD que estou usando no momento.
//Lendo a imagem
procedure TFrmFuncionario.DSFuncionarioDataChange(Sender: TObject;
Field: TField);
var
CampoBlob:TBlobStream;
ImgJpeg:TJPEGImage;
begin
if QyFuncionarioFoto.AsString <> ´´ Then
begin
CampoBlob := TBlobStream.Create(QyFuncionarioFoto,BmRead);
ImgJpeg := TJPEGImage.Create;
if CampoBlob.Size > 1 then
begin
CampoBlob.Position:=0;
ImgJpeg.LoadFromStream(CampoBlob);
Image1.Picture.Assign(ImgJpeg);
end;
CampoBlob.Free;
ImgJpeg.Free;
end
else
Image1.Picture := nil;
end;
//Gravando a imagem
procedure TFrmFuncionario.Image1DblClick(Sender: TObject);
var
CampoBlob:TBlobStream;
ImgJpeg:TJPEGImage;
begin
if QyFuncionario.RecordCount > 0 then
begin
Foto.Execute;
if Foto.FileName <> ´´ then
begin
QyFuncionario.Edit;
CampoBlob:= TBlobStream.Create(QyFuncionarioFoto,BmWrite);
ImgJpeg:= TJPEGImage.Create;
ImgJpeg.LoadFromFile(Foto.FileName);
ImgJpeg.SaveToStream(CampoBlob);
Image1.Picture.Assign(ImgJpeg);
CampoBlob.Free;
ImgJpeg.Free;
QyFuncionario.Post;
end;
end
else
MessageDlg(´Não há ainda nenhum funcionário cadastrado.´+#13+
´Cadastramento de foto não disponível.´, mtWarning, [mbOK], 0);
end;
Bom, é isso ... espero que os amigos me ajude nessa questão. Desde já, agradeço a todos.
Ricardo
Gostei + 0
23/05/2007
Ricvictor
Um abraço. Ricardo
Gostei + 0
24/05/2007
Massuda
Gostei + 0
24/05/2007
Ricvictor
Os componentes que estou utilizando na aplicação que são usados para conexão com o BD são ... TDatabase, TQuery (BDE).
Espero que os amigos consigam me ajudar ...
Um abraço. Ricardo.
Gostei + 0
24/05/2007
Gandalf.nho
Gostei + 0
18/09/2007
Walfrido
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)