如何将.png图像插入TClientDataSet .cds文件?

时间:2017-02-26 10:52:48

标签: delphi

我使用的是Delphi XE8。多设备应用程序。

我的.cds文件我' ve字段:[ID]字段类型:ftAutoInc和字段:[IMAGE]字段类型:ftGraphic。

我只想将.png图像插入.cds文件。但是,当我将.png图像插入.cds时,它会插入。当我尝试从.cds加载时,它会给出消息"位图图像无效"。

那么如何解决这个问题呢?

提前致谢!

这是我的代码:

procedure TForm1.btnImageInsertClick(Sender: TObject);
  var
  LStream : TMemoryStream;
begin
if OpenDialog1.Execute then
  begin

   Image1.Bitmap.LoadFromFile(OpenDialog1.FileName);

    LStream := TMemoryStream.Create;
    Image1.Bitmap.SaveToStream(LStream);
   {
    cdsMenu2.Insert;
    cdsMenu2.FieldByName('IMAGE').Assign(Image1.Bitmap);
    cdsMenu2.Post;
   }

    cdsMenu2.Insert;
    TBlobField(cdsMenu2.FieldByName('IMAGE')).LoadFromStream(LStream);
    cdsMenu2.Post;
    cdsMenu2.SaveToFile(ExtractFileDir(ParamStr(0))+'\db\menu2.cds');

  end;

1 个答案:

答案 0 :(得分:3)

尝试使用此代码:

添加对单元Vcl.Imaging.pngimage;

的引用
procedure TForm1.btnImageInsertClick(Sender: TObject); 
var   
 LStream : TMemoryStream;   
 Png: TPngImage;  
begin 
 if OpenDialog1.Execute then  
  begin   
   Image1.Bitmap.LoadFromFile(OpenDialog1.FileName);   
   LStream:= TMemoryStream.Create;   
   Png:= TPngImage.Create;    
   try
    Png.Assign(Image1.Bitmap);
    Png.SaveToStream(LStream);
    LStream.Position:= 0;

    cdsMenu2.Insert;
    (cdsMenu2.FieldByName('IMAGE') as TBlobField).LoadFromStream(LStream);
    cdsMenu2.Post;
    cdsMenu2.SaveToFile(ExtractFileDir(ParamStr(0))+'\db\menu2.cds');   
   finally    
    LStream.Free;    
    Png.Free;   
   end;  
  end; 
end;