Fórum Como gravar/ler uma imagem completa no BD ? #342253
23/05/2007
0
[quote:cd1eb0c802=´Moderação´][color=red:cd1eb0c802]Tópico bloqueado por Massuda
Tópico duplicado. Por favor, mantenha a discussão no tópico original...
http://forum.devmedia.com.br/viewtopic.php?t=87566[/color:cd1eb0c802][/quote:cd1eb0c802]
Amigos do Forum, a saga continua infelizmente !! :(
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
Tópico duplicado. Por favor, mantenha a discussão no tópico original...
http://forum.devmedia.com.br/viewtopic.php?t=87566[/color:cd1eb0c802][/quote:cd1eb0c802]
Amigos do Forum, a saga continua infelizmente !! :(
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
Ricvictor
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)