//我要把数据库图片的流文件读入内存,
  然后再从内存读入一个流中, 
  再显示出来 
var    
    SqlLug:String;
    mStream,mStream1:TMemoryStream;
    lBufSize: Integer;
    sockRequest : TSocket;
    lpBuf: PChar;
    i:integer;
    JpgFile:TjpegImage;
begin
    mStream:=TMemoryStream.Create ;
    TBlobField(ADOQ_Photo.FieldByName('pic')).SaveToStream(mStream)       
    lBufSize:=mStream.Size;
    mStream.Read(lpBuf^, lBufSize);//这里是不是有错误???
    mStream1.Write(lpBuf^, lBufSize);//这里是不是有错误???
    mStream1.Position :=0;
    JpgFile:=TjpegImage.Create ;
    jpgfile.LoadFromStream(MStream1);
    image1.Picture.Assign(JpgFile);
end

解决方案 »

  1.   


       
    //我要把数据库图片的流文件读入内存,  
       然后再从内存读入一个流中,    
       再显示出来    
    var          
           SqlLug:String;  
           mStream,mStream1:TMemoryStream;  
           lBufSize:  Integer;  
           sockRequest  :  TSocket;  
           lpBuf:  PChar;  
           i:integer;  
           JpgFile:TjpegImage;  
    begin  
           mStream:=TMemoryStream.Create  ;  
           mStream1:=TMemoryStream.Create  ;
           TBlobField(ADOQ_Photo.FieldByName('pic')).SaveToStream(mStream)                
           lBufSize:=mStream.Size;  
           mStream.Read(lpBuf^,  lBufSize);//这里是不是有错误???  
           mStream1.Write(lpBuf^,  lBufSize);//这里是不是有错误???  
           mStream1.Position  :=0;  
           JpgFile:=TjpegImage.Create  ;  
           jpgfile.LoadFromStream(MStream1);  
           image1.Picture.Assign(JpgFile);  
    end 
      

  2.   

    --测试通过var tempstream:TStringStream;
       tempjpeg:TJPEGImage;
    begin
      try
        self.ADODataSet1.Close;
        self.ADODataSet1.CommandText:='select * from photo where xh=''4117072007013692''';
        self.ADODataSet1.Open;
        tempstream:=TStringStream.Create(' ');
        TBlobField(ADODataSet1.FieldByName('photo1')).SaveToStream(tempstream);
        tempstream.Position:=0;
        tempjpeg:=TJPEGImage.Create;
        tempjpeg.LoadFromStream(tempstream);
        self.Image1.Picture.Bitmap.Assign( tempjpeg );
      finally
        tempstream.Free;
        tempjpeg.Free;
      end;
    end;
      

  3.   

    谢谢 月亮,但是我现在需要的就是准确的read和write的过程,不是直接显示图片的过程,我的流read和write到buffer的操作不知道如何操作,能按照上面我程序的意思转到 mystream1 来 显示吗?
      

  4.   

    mStream.Read(lpBuf^, lBufSize);//mStream1写入lpBuf
    mStream1.Write(lpBuf^, lBufSize);//lpBuf写入mStream1
      

  5.   

    var tempstream:TStringStream;
       tempjpeg:TJPEGImage;
       ms:TMemoryStream;
       lBufSize:Pchar;
    begin
      try
        self.ADODataSet1.Close;
        self.ADODataSet1.CommandText:='select * from epbms.vio_jdczp where xh=''4117072007013692''';
        self.ADODataSet1.Open;
        ms:= TMemoryStream.Create;
        tempstream:=TStringStream.Create(' ');
        TBlobField(ADODataSet1.FieldByName('photo1')).SaveToStream(tempstream);
        tempstream.Position:=0;
        Getmem(lbufsize,   tempStream.size);//注意这里
        tempstream.Read( lbufsize^,tempStream.size );
        ms.Position:=0;
        ms.Write( lbufsize^, tempStream.size );
        ms.Position:=0;
        tempjpeg:=TJPEGImage.Create;
        tempjpeg.LoadFromStream(ms);
        self.Image1.Picture.Bitmap.Assign( tempjpeg );
      finally
        Freemem( lbufsize );
        tempstream.Free;
        tempjpeg.Free;
        ms.Free;
      end;
    end;给分吧