我在DELPHI6(安装了GIFIMAGE)下面编写一个在ACCESS数据库中存取图片的程序,
使用流读取出了图片文件,并且存进了数据库,可是不能存取GIF格式的图片,可是我面临的主要问题就是能够对GIF格式的文件管理,而且最最重要的就是能够从数据库中读出并在IMAGE控件中显示,请各位指教,谢谢!
   数据库定义:
    ID:        关键字
    PICPHOTO:  OLE对象DELPHI代码:
//打开图片,并且在IMAGE1中显示
procedure TForm1.Button1Click(Sender: TObject);
var
MS: TFileStream;
begin
 if OpenDialog1.Execute then
  begin
    MS:=TFileStream.Create(OpenDialog1.FileName,fmOpenRead);
    //Image1.Picture.Bitmap.LoadFromStream(MS);
    MS.Free;
  end;
end;
//存入数据库中
procedure TForm1.btnSaveClick(Sender: TObject);
var
  MS: TMemoryStream;
begin
  MS:=TMemoryStream.create;
  Image1.Picture.Bitmap.SaveToStream(MS);
  MS.Position:=0;
  AdoTable1.Append;
  TBlobField(AdoTable1.FieldbyName('PicPhoto')).LoadFromStream(MS);
  AdoTable1.Post;
end;
//从数据库中取出并在IMAGE1中显示
procedure TForm1.DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
var
  MS: TStream;
begin
  with AdoTable1 do
    MS:=CreateBlobStream(FieldbyName('Picphoto'),bmRead);
  Image1.Picture.Graphic.LoadFromStream(MS);
  MS.Free;
end;

解决方案 »

  1.   

    打开图片可以不通过TMemorySTream,直接Image1.Picture.LoadFromFile();为什么你屏蔽了Image1.Picture.Bitmap.LoadFromStream(MS);其他的没有什么错误了。
    估计是图片没有存到数据库。
      

  2.   

    直接用DBimage可以了,不过是BMP格式.
      

  3.   

    现在的主要问题就是,要能够读入和写出GIF格式的,BMP肯定没有任何问题的.屏蔽Image1.Picture.Bitmap.LoadFromStream(MS);与整个问题的关系不大,而且这个语句只能把BMP的图片在IMAGE1中显示出来,其他的就不行了
      

  4.   

    好像你用的存入内存流的用法是针对BMP的。可能要传化一下。
      

  5.   

    不能屏蔽了Image1.Picture.Bitmap.LoadFromStream(MS);
      

  6.   

    直接Image1.Picture.LoadFromFile()应该可以阿!
      

  7.   

    现在的问题是:
          我把图片存了进去,可是如何读出来呢?下面的是我写的读出的代码:
    procedure TForm1.Cjt_JpgLoad;
    var
      MS: TMemoryStream;
    begin
    Try
      MS := TMemoryStream.Create;
      with AdoTable1 do
        TBlobField(ADOTable1.FieldByName('Picphoto')).SaveToStream(MS);
      //Image1.Picture.LoadFromStream();
      MS.Free;
    except
      Exit;
    end;
       创建一个内存流,然后将PICPHOTO中的内容写入到MS流中,然后,怎么能把MS流中的内容在IMAGE1中显示出来,这是我急需解决的问题。
      

  8.   

    Image1.Picture.LoadFromFile();不行么
      

  9.   

    标准的image控件是不支持gif格式文件的,你可以去找一个gifimage的文件包,在delphi中注册后image控件就可以显示gif,而且是gif89,动画也没问题
      

  10.   

    procedure TForm1.Cjt_JpgLoad;
    var
      MS: TMemoryStream;
    如果你正确安裝了 gifimage後, 下面代碼應該沒問題吧
    begin
    Try
      MS := TMemoryStream.Create;
      with AdoTable1 do
        TBlobField(ADOTable1.FieldByName('Picphoto')).SaveToStream(MS);
        Ms.Seek(0,soFromBeginning);
        Image1.Picture.LoadFromStream(ms);
      MS.Free;
    except
      Exit;
    end;