请帮我看看下面有关使用image显示和保存jpg图片的问题,有点奇怪!谢谢啦先!(200分)

H

howyer

Unregistered / Unconfirmed
GUEST, unregistred user!
请帮我看看下面有关使用image显示和保存jpg图片的问题,谢谢!

procedure TForm1.ToolButton7Click(Sender: TObject);
var
MsImg: TMemoryStream;
JpImg: TJpegImage;
begin
try
MsImg := TMemoryStream.Create;
MsImg.LoadFromFile('C:/1.Jpg');

JpImg := TJpegImage.Create;
//JpImg.LoadFromStream(MsImg);
//JpImg.SaveToFile('C:/2.Jpg');

ADODataSet1.Append;
TBlobField(ADODataSet1.FieldByName('Img')).LoadFromStream(MsImg);
ADODataSet1.Post;

JpImg.LoadFromStream(MsImg);
JpImg.SaveToFile('C:/3.Jpg');
finally
MsImg.Free;
JpImg.Free;
end;
end;
上面的代码运行后无错误提示,但C:/3.Jpg字节为0
如果改为:
try
MsImg := TMemoryStream.Create;
MsImg.LoadFromFile('C:/1.Jpg');

JpImg := TJpegImage.Create;
JpImg.LoadFromStream(MsImg);
JpImg.SaveToFile('C:/2.Jpg');

ADODataSet1.Append;
TBlobField(ADODataSet1.FieldByName('Img')).LoadFromStream(MsImg);
ADODataSet1.Post;

//JpImg.LoadFromStream(MsImg);
//JpImg.SaveToFile('C:/3.Jpg');
finally
MsImg.Free;
JpImg.Free;
end;
则正确。C:/2.Jpg和C:/1.Jpg一样。不知道为什么?数据保存没有问题,数据库是sql2000,字段类型image


同一个数据:
procedure TForm1.ToolButton5Click(Sender: TObject);
var
MsImg: TMemoryStream;
JpImg: TJpegImage;
begin
try
TBlobField(ADODataSet1.FieldByName('Img')).SaveToFile('c:/4.jpg');

MsImg := TMemoryStream.Create;
JpImg := TJpegImage.Create;
TBlobField(ADODataSet1.FieldByName('Img')).SaveToStream(MsImg);
JpImg.LoadFromStream(MsImg);
JpImg.SaveToFile('C:/5.Jpg');
finally
JpImg.Free;
MsImg.Free;
end;
end;
结果:C:/4.Jpg和C:/1.Jpg是一样的,C:/2.Jpg字节为0,不明白?

请教,在线等待。
 
JpImg.LoadFromStream(MsImg);
JpImg.SaveToFile('C:/3.Jpg');
改成
JpImg.LoadFromStream(MsImg);
JpImg.Position:=0;
JpImg.SaveToFile('C:/3.Jpg');
 
ADODataSet1.Append;
TBlobField(ADODataSet1.FieldByName('Img')).LoadFromStream(MsImg);
ADODataSet1.Post;

JpImg.LoadFromStream(MsImg);
JpImg.SaveToFile('C:/3.Jpg');

估计是 TBlobField(ADODataSet1.FieldByName('Img')).LoadFromStream(MsImg);
这句中的LoadFromStream(MsImg);的实现与 JpImg.LoadFromStream(MsImg);的
LoadFromStream(MsImg);的实现不一样,查一下源码。
 
加一条:
MsImg.postion:=0
 
qhx的办法正确,但我不知道为什么?我查过以前的相关帖子,没有人提过。
wwolf估计是笔误。:)
感谢大家。
 
多人接受答案了。
不好意思,加分的时候看错名字啦,对不起Qhx,希望别见怪。
 
第一条列子:
这条语句之后TBlobField(ADODataSet1.FieldByName('Img')).LoadFromStream(MsImg);
流msimg的位置到了最后,所以需要MsImg.postion:=0.
第二条列子:
不明白了,也应该加MsImg.postion:=0才对.

 
理解了,谢谢。
 
顶部