zoukankan      html  css  js  c++  java
  • dephi中显示图片

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


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

    procedure TForm3.btn2Click(Sender: TObject);     //讀取圖片過程
    var
      tStream:TMemoryStream;
      Jpg:TjpegImage;
    begin
    qry1.Close;
    qry1.SQL.Text:='select (photo) from photo';
    qry1.Open;
      if not qry1.FieldByName('photo').IsNull then
      begin
        tStream:=TMemoryStream.Create ;
        Jpg:=TjpegImage.Create ;
        TBlobField(qry1.FieldByName('photo')).SaveToStream(tStream);  //顯示的轉換為BlobFiled並保存至內存流
        tStream.Position :=0;
        jpg.LoadFromStream(tStream);
        img2.Picture.Assign(Jpg);
    end
    else
    begin
       img2.Picture :=nil;
    end;
    end;

  • 相关阅读:
    nginx防止盗链
    Nginx防盗链详细设置
    [bzoj2127]happiness
    [bzoj2400]Optimal Marks
    [bzoj1738]发抖的牛
    [bzoj1741]穿越小行星群
    [bzoj3123]森林
    [bzoj2588]Count on a tree
    [bzoj3144]切糕
    [bzoj1787]紧急集合
  • 原文地址:https://www.cnblogs.com/hanhan/p/2427286.html
Copyright © 2011-2022 走看看