Delphi6の Unit
プログラミングの話。
今回受託した案件は XMLファイルから車両のデータを取り出し、更に Base64でエンコードされた JPEG画像をファイルへ保存するというもの。
最新の RAD環境だと情報があって割と簡単に実装できたのですが、単純な機能なのに実行ファイルが大きい。なので、どうにかして Delphi6で作ろうと試行錯誤していました。海外の BBSまで検索しないと情報が得られなかったのですが、なんとかものにできました。結果、2.8MBだった実行ファイルが 750KBまで小さくできました。
きっと同様な事で困っている人もいると思うしなかなか苦労したので、実装方法をシェアします。
前提として XMLファイルへ埋め込まれている画像は JPEGで、タグで囲まれているものとします。関数の全文を載せますので、適宜編集してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | function AnkXmlDecodeJpeg(XmlFile: string): Boolean; var sl: TStringList; s, sJpg: AnsiString; ms : TMemoryStream; jpg : TJpegImage; begin sl := TStringList.Create; try sl.LoadFromFile(XmlFile); s := sl.Text; sJpg := AnkXmlValue(s, '<img>'); ms := TMemoryStream.Create; try if Length(sJpg)>0 then begin // dc := TIdDecoderMIME.Create(nil); dc.DecodeStream(sJpg, ms); ms.position:=0; jpg:=TJpegImage.Create; try jpg.LoadFromStream(ms); jpg.SaveToFile(ChangeFileExt(XmlFile, '.jpg')); Result := true; finally // FreeAndNil(dc); FreeAndNil(jpg); end; end; finally FreeAndNil(ms); end; finally FreeAndNil(sl); end; end; |