delphi 显示图片

  我��知道BLOB在数据库的表中实际上是以二进制数据的形式存放的。由于BLOB的特殊性,一般的程序都无法处理它。比如,如果在一张表中存在BLOB,当用����@示控件打开它时,BLOB列将只显示BLOB字样。至于该列中实际存的是什么数据是一般的����@示控件无法知到的。如果在我们编制的程序中,用DBGrid控件打开一个有BLOB字段的表,效果也一样。我们的程序无法直接显示、编辑以及插入BLOB字段。可见,常规的方法是不能满足要求的。
        既然我��知道���以二�M制形式存放,那�N就可以通过内存流来完成。使用内存流,可减少磁盘操作,�亩�大大提高运行效率。程序的���F代�a如下(以Delphi�槔��M行�f明):
procedure TForm1.Button1Click(Sender: TObject);               //插入�D片�^程
var
  testStream:TMemoryStream;
begin
  try
    testStream := TMemoryStream.Create;                                 //��建�却媪�
    Image1.Picture.Graphic.SaveToStream(testStream);  //��D片保存至�却媪髦�
    adoquery1.Close;
    adoquery1.SQL.Clear;
    adoQuery1.SQL.Add('Insert into test (id,photo) values (:id,:photo)'); //�M行插入操作
    adoquery1.Parameters.ParamByName('id').Value := '003';
    adoQuery1.Parameters.ParamByName('photo').LoadFromStream(testStream,ftBlob);  //�x取保存的�却�D
    adoquery1.ExecSQL;
  finally
    testStream.Free;                                                                     //�放�却媪�
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);                //�x取�D片�^程
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);  //�@示的�D�Q��BlobFiled�K保存至�却媪�
    mStream.Position :=0;
    jpgfile.LoadFromStream(MStream);
    image2.Picture.Assign(JpgFile);
end
else begin
   image2.Picture :=nil;
end;
end;

        以上的例子只是�f明�D片的�x��操作�^程,��然,只要小小的改�樱�就可以��樽x��任意的Blob�型。

       �W上的�热萏��S富,如有雷同,��偾珊希�

你可能感兴趣的:(图片,职场,Delphi,休闲)