Delphi 10.2の使用TClientDataSetを右クリックし、「MyBase Xml UTF-8テーブルに保存」を選択します。私は、バイナリビットマップのBase64文字列表現であると信じるものを変換しようとしているMyBase XmlファイルからのTPicture
<FIELD attrname="BMP" fieldtype="bin.hex" SUBTYPE="TypedBinary" WIDTH="1"/>
:として
<ROW NAME="Angel Fish" SIZE="2" WEIGHT="2" AREA="Computer Aquariums" BMP="AQAAAfY+AABCTfY+AAAAAAAAdgAAACgAAADIAAAAoAAAAAEA ...
BMPフィールドが定義されている:私は今、この形式のXMLファイルを持っていますファイルを画像に挿入する。これまでのところ、私はこれを持っている:$ 74DCCBB2で
最初のチャンス例外:
uses
XMLDoc, Vcl.ComCtrls, XMLIntf, IdCoder, IdCoderMIME, IdGlobal,
Vcl.ExtCtrls;
procedure TForm2.Button1Click(Sender: TObject);
var Doc:TXMLDocument;
First:IXMLNode;
Str:String;
Bytes: TIdBytes;
Pic:TPicture;
Stream:TMemoryStream;
Writer: TBinaryWriter;
begin
Doc:=TXMLDocument.Create(Self);
Doc.FileName:='D:\temp\ClientDataSet2.xml';
Doc.Active:=true;
First:=Doc.DocumentElement.ChildNodes['ROWDATA'].ChildNodes.First;
Str:=First.Attributes['BMP'];
Bytes:=TIdDecoderMIME.DecodeBytes(Str);
Stream:=TMemoryStream.Create;
Writer:=TBinaryWriter.Create(Stream);
Writer.Write(TBytes(Bytes));
Stream.Position:=0;
Pic:=TPicture.Create;
Pic.LoadFromStream(Stream);
Image1.Picture:=Pic;
RichEdit1.Text:=Str;
end;
しかし、TPicture.LoadFromStreamは、この例外がスローされます。例外クラスEInvalidGraphicに 'サポートされていないストリーム形式'というメッセージがあります。
私が間違っていることを教えてもらえますか?どうもありがとう。
は、なぜあなたは生のXMLを読んでいると、ちょうど戻ったTClientDatasetにロードし、のTFieldを通してそれにアクセスしていない:あなたの代わりに
TBitmap
でTPicture
を置き換える必要がありますのでところで、
TPicture.LoadFromStream()
はちょうど、TPicture.Bitmap.LoadFromStream()
を呼び出しますか? –私はこのXMLファイルをC#で再利用したいので、イメージをマイナスできます。 C#で画像を読み込めなかったので、私は問題を解決するためにDelphiに戻ってくると思っていました。 –