如何优化Delphi代码进行图像解码?

Iva*_*n Z 3 delphi image image-processing

我已编码图像,并希望在我的程序中解码它们.图像解码基于Loren Pechtel的答案:图像文件在Stream中加载,解码,转换为MemoryStream,然后由TSynPicture类从MemoryStream加载.Delphi代码如下:

function loadEncodedImage(filename, keycode : string) : TBitmap;
  syn : TSynPicture;
  fs  : TFileStream;
  ms  : TMemoryStream;
  buf : AnsiString;
begin
  result := nil;
  try
    fs := TFileStream.Create(filename, fmOpenRead);
    SetLength( buf, fs.Size );
    fs.ReadBuffer( buf[1], fs.Size );

    // ....
    // Here I decode data stored in buf and put it into buf again.
    // ....

    ms := TMemoryStream.Create();
    ms.SetSize( fs.Size );
    ms.WriteBuffer( buf[1], fs.Size );

    syn := TSynPicture.Create();
    syn.LoadFromStream( ms );
    result := syn.ToBitmap;
  finally
    FreeAndNil( fs );
    FreeAndNil( syn );
   end;
end;
Run Code Online (Sandbox Code Playgroud)

如你所见,我使用两个内存缓冲区:bufTMemoryStream.如何优化此代码以避免双内存使用?

Jen*_*nsG 6

TMemoryStream有一个Memory允许直接访问内存块的成员.这样你就可以完全消除buf.