TQuery可以正常显示的。不过你的方法似乎土了一点。

解决方案 »

  1.   

    var
      b: TBlobStream;
      s: TMemoryStream;
    begin
      b := TBlobStream(Query1.Fields[5], bmRead);
      s := TmemoryStream.create;
      try
      s.copyfrom(b, b.size);
      s.savetofile('c:\t.jpg');
      image1.picture.loadfromfile('c:\t.jpg');
      finally
       b.free;
       s.free;
      end;
    end;
      

  2.   

    type
      THashJpg = class(TJPEGImage)
      end;begin
      FJpeg := THashJpg.Create;  if Assigned(FField) then
        if not FField.IsNull then begin
          FStream := TBlobStream.Create(TBlobField(FField), bmRead);
          try
            FJpeg.LoadFromStream(FStream);
            Image1.Picture.Assign(FJpeg.Bitmap);
          finally
            FStream.Free
          end
        end
        else
          Image1.Picture.Assign(nil)
    end;
      

  3.   

    lvloj, chechy的程序都能出图像,我的实际上也行???to lvloj, chechy,
    但还有问题,用TQuery时,在演示程序中出来的的图像很小,在另一个程序中则出来上面一窄条。
    而用我原先的一段程序,都是出来一窄条,怪!???
      

  4.   

    lvloj, chechy的程序都能出图像,我的实际上也行???to lvloj, chechy,
    但还有问题,用TQuery时,在演示程序中出来的的图像很小,在另一个程序中则出来上面一窄条。
    而用我原先的一段程序,都是出来一窄条,怪!???
      

  5.   

    lvloj, chechy的程序都能出图像,我的实际上也行???to lvloj, chechy,
    但还有问题,用TQuery时,在演示程序中出来的的图像很小,在另一个程序中则出来上面一窄条。
    而用我原先的一段程序,都是出来一窄条,怪!???
      

  6.   

    可以将image的Stretch属性设为true
      

  7.   

    >>>lvloj, chechy的程序都能出图像,我的实际上也行???
    我这句话说错了,实际上是都不行,
    用Tquery得到包含图象的字段的方法时,都不行的(图象只出来上部的一半,不知是否和TQuery的设置,或其他设置有关),但只要改用TTable,都没有问题,明天我把我的试验代码贴出来,请大家看一看。
      

  8.   

    ImgTb1为TTable类型的对象,ImgTb2为TQuery的对象,下面的所有方法都只显示上半部图像,当将ImgTb2换成ImgTb1时,所有方法显示正常。由于是测试用的程序,写的较乱!//我的方法
    procedure TForm1.Button1Click(Sender: TObject);
    var
       size:Integer;
    begin
       Imgtb2.Open();
       //size:=TBlobField(Imgtb2.Fields[5]).BlobSize;
       //if size >0 then
       Begin
          TBlobField(Imgtb2.Fields[7]).SaveToFile('C:\T.Jpg');
          Image1.Picture.LoadFromFile('C:\T.Jpg');
       End;
    end;//chechy的方法
    procedure TForm1.chechyClick(Sender: TObject);
    var
       FJpeg :THashJpg;
       FField:TBlobField;
       FStream:TBlobStream;
    begin
       FJpeg := THashJpg.Create;   //Imgtb2.Open();
       //FField :=TBlobField(Imgtb2.Fields[5]);
       Imgtb2.Open();
       FField :=TBlobField(Imgtb2.Fields[7]);
       if Assigned(FField) then
       begin
          if not FField.IsNull then
          begin
             FStream := TBlobStream.Create(TBlobField(FField), bmRead);
             try
                FJpeg.LoadFromStream(FStream);
                Image1.Picture.Assign(FJpeg);
             finally
                FStream.Free
             end;
          end;
       end else
          Image1.Picture.Assign(nil);
       FJpeg.Free;
    end;// lvloj的方法
    procedure TForm1.Button4Click(Sender: TObject);
    var
       b: TBlobStream;
       s: TMemoryStream;
       FField:TBlobField;
    begin
       Imgtb2.Open();
       FField :=TBlobField(Imgtb2.Fields[7]);   b := TBlobStream.Create(FField as TBlobField,bmRead);
       s := TmemoryStream.create;
       try
          s.copyfrom(b, b.size);
          s.savetofile('c:\t.jpg');
          image1.picture.loadfromfile('c:\t.jpg');
       finally
          b.free;
          s.free;
       end;
    end;//我的另一方法
    procedure TForm1.Button3Click(Sender: TObject);
    var
      Jpg2:TJPEGImage;
      Stream:TStream;
       FField:TBlobField;
    begin
       Imgtb2.Open();
       Jpg2:=TJPEGImage.Create;
       FField :=TBlobField(Imgtb2.Fields[7]);
       try
          Stream := Imgtb2.CreateBlobStream(FField, bmRead);
          try
             Jpg2.LoadFromStream(Stream);
             Image1.Picture.Assign(Jpg2);
          finally
             Stream.Free;
          end;
       finally
          Jpg2.Free;
       end;end;//和上一方法差不多
    procedure TForm1.Button5Click(Sender: TObject);
    var
       FJpeg :TJPEGImage;//THashJpg;
       FField:TBlobField;
       //FStream:TBlobStream;
       FStream:TStream;
    begin
       FJpeg := TJPEGImage.Create();//THashJpg.Create;   Imgtb2.Open();
       FField :=TBlobField(Imgtb2.Fields[7]);
       if Assigned(FField) then
       begin
          if not FField.IsNull then
          begin
    //         FStream := TBlobStream.Create(TBlobField(FField), bmRead);
             FStream := Imgtb2.CreateBlobStream(FField, bmRead);
             try
                FJpeg.LoadFromStream(FStream);
                Image1.Picture.Assign(FJpeg);
             finally
                FStream.Free
             end;
          end;
       end else
          Image1.Picture.Assign(nil);
       FJpeg.Free;
    end;
      

  9.   

    哦,谢谢chechy的提醒,我将Blob size 改为64k就可以了,可又有问题了,这个值设多少为好,我的图像有80-90k设成64k就没有问题了。
      

  10.   

    设成64K后居然300-400k的图像显示也没有问题了,另外怎么通过程序改该设置(已经配置了ODBC)?
      

  11.   

    哦,现在脑袋有问题,怎么不转弯呢!!!Blob Size 这个值设多少为好??有什么规则吗???