2017-02-26 8 views
0

私はDelphi XE8を使用しています。マルチデバイスアプリケーション。.pngイメージをTClientDataSet .cdsファイルに挿入するには?

Im私のフィールド:[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

読者はあなたの画面を見ることができません。どちらか正確な**ラインは、 "ビットマップイメージが無効です"エラーが発生しますか? – MartynA

答えて

2

それが必要このコードを試してください:ここで

は私のコードです

は単位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; 
関連する問題