Delphi 显示图片

      我們知道BLOB在数据库的表中实际上是以二进制数据的形式存放的。由于BLOB的特殊性,一般的程序都无法处理它。比如,如果在一张表中存在BLOB, 当用數據顯示控件打开它时,BLOB列将只显示BLOB字样。至于该列中实际存的是什么数据是一般的數據顯示控件无法知到的。如果在我们编制的程序中,用 DBGrid控件打开一个有BLOB字段的表,效果也一样。我们的程序无法直接显示、编辑以及插入BLOB字段。可见,常规的方法是不能满足要求的。 
      既然我們知道數據以二進制形式存放,那麼就可以通过内存流来完成。使用内存流,可减少磁盘操作,從而大大提高运行效率。程序的實現代碼如下(以Delphi為例進行說明):

procedure TForm1.Button1Click(Sender: TObject); //插入圖片過程 var testStream:TMemoryStream; begin try testStream := TMemoryStream.Create; //創建內存流 Image1.Picture.Graphic.SaveToStream(testStream);  //將圖片保存至內存流中 adoquery1.Close; adoquery1.SQL.Clear; adoQuery1.SQL.Add('Insert into test (id,photo) values (:id,:photo)'); //進行插入操作 adoquery1.Parameters.ParamByName('id').Value := '003'; adoQuery1.Parameters.ParamByName('photo').LoadFromStream(testStream,ftBlob); //讀取保存的內存圖 adoquery1.ExecSQL; finally testStream.Free;   //釋放內存流 end; end;


 

procedure TForm1.Button2Click(Sender: TObject); //讀取圖片過程 var mStream:TMemoryStream; JpgFile:TjpegImage; begin if not ADOQuery1.FieldByName('photo').IsNull then begin ; mStream:=TMemoryStream.Create ; JpgFile:=TjpegImage.Create ; TBlobField(ADOQuery1.FieldByName('photo')).SaveToStream(mStream);  //顯示的轉換為BlobFiled並保存至內存流 mStream.Position :=0; jpgfile.LoadFromStream(MStream); image2.Picture.Assign(JpgFile); end else begin image2.Picture :=nil; end; end;


 

 

你可能感兴趣的:(Delphi)