各位大虾:当我使用下面的语句时:
procedure TForm1.Button3Click(Sender: TObject);
begin
image1.Picture.bitmap.Assign (TBlobField(query1.FieldbyName('pic')));
end;
end.
delphi报错 "bitmap image is not valid". 位图图象绝对没问题,我已经试过多次。我用的数据库是access 2000 。
当我改为下面的代码:
procedure TForm1.Button1Click(Sender: TObject);
var
b:Tmemorystream;
begin
b:=Tmemorystream.create ;
tblobfield(query1.FieldByName('pic')).SaveToStream (b);
image1.Picture.Bitmap.LoadFromStream (b) ;
end;
delphi没有任何错误出现,但是image中根本不显示图象。query1的查询无问题,我也试过多次。(用dbimage也是一样)
请问那位仁兄可解此问题,image如何才能显示blob中的图象呢?

解决方案 »

  1.   

    image1好像只能直接显示数据库中的bmp,其它格式的不行
      

  2.   

    和什么数据库没有关系。
    不能显示有2个可能。
    1、你的代码有错误,
    tblobfield(query1.FieldByName('pic')).SaveToStream (b);
    /////////加一句 b.Position:=0;
    image1.Picture.Bitmap.LoadFromStream (b) ;2、数据库中保存的是JPG文件,不是BMP,(也可以是其他类型文件,处理比较麻烦)
    可以这样处理:
            jp := TJPEGImage.Create;
            jp.LoadFromStream(b);
            try
                image1.Picture.Bitmap.Assign(jp);
            finally
                jp.Free;
            end;
      

  3.   

    我也遇到过,用内存流不行
    可以先保存成一个文件,然后 timage 去装载这个文件,用完后删除这个文件就可以了
    我这么用, jpg 和 bmp 都没有问题
      

  4.   

    楼上用TGraphicField试过么,用tblobfield没有指明流数据的类型,程序当然不知道是图片了
    用TGraphicField指明了数据类型是ftGraphic,这样就应该没问题了