IMAGE载入流图象问题 ( 积分: 50 )

  • 主题发起人 主题发起人 youxi
  • 开始时间 开始时间
Y

youxi

Unregistered / Unconfirmed
GUEST, unregistred user!
var
MS_Read : TStream
begin
MS_Read:=AdoQry.CreateBlobStream(AdoQry.FieldByName('ID_Card_Image'),bmRead);
Image.Picture.Graphic.LoadFromStream(MS_Read);
end;
以上执行就提示内存错误

如果是
var
MS_Read : TStream
begin
MS_Read:=AdoQry.CreateBlobStream(AdoQry.FieldByName('ID_Card_Image'),bmRead);
Image.Picture.LoadFromFile(ExtractFilePath(Application.ExeName)+'ABC.Jpg')
Image.Picture.Graphic.LoadFromStream(MS_Read);
end;
就可以显示

请各位帮帮忙哈
 
不那么用
多用try
var
stream:tmemorystream;
begin
try
stream ;= tmemorystream.create;
BlobField(adoQry.fieldbyname('id_card_image')).savetostream(stream);
image.picture.graphic.loadfromstream(stream);//干吗重复loadfromfile??
finnaly
stream.free;
end;
如果要存回,该
BlobField(adoQry.fieldbyname('id_card_image')).loadfromstream(stream);
顺序我不用说了吧
tmemorystream 更加快
 
还是在这句的时候报错啊
image.picture.graphic.loadfromstream(stream);

重复Image.Picture.LoadFromFile是因为加了这句就可以从MS_Read里面读出图象,我也不想重复哈
 
实在是,,,,唉,我不入地狱谁入地狱?就让我做回弱智吧。

Stream 读或 Stream 写的一个基本概念就是指针位置随之变化。所以,读完或写完后,
指针指向的是最后读或写的位置。

而任何可以读取 Stream 的代码,总是从当前指针开始读。所以,只要把指针移动到合适
的位置——比如:移动到 Stream 的最开头,,,,。
 
看见小雨哥了:)
我也来说两句,真正出问题的地方是:
image.picture.graphic.loadfromstream(stream);
需要改成
image.picture.loadfromstream(stream);
为什么?看VCL源代码就明白了。。。
还有小雨哥所说的Stream位置的问题也很重要,是一个很容易弄错的地方。。。
 
呵呵,那就是做stream.position:=0;了。
我用这句也行Image.Picture.Assign(BlobField(AdoQry.FieldByName('ID_Card_Image')));
 
后退
顶部