WriteBinaryStream 压缩到 INI 文件?

WriteBinaryStream compressed to INI file?

在 Delphi 10.4 中,我尝试将有效的 TPicture compressed 保存到 INI 文件中,尝试从文档中复制 ZLibCompressDecompress example

procedure TForm1.SavePictureToIniFile(const APicture: TPicture);
// 
var
  LInput: TMemoryStream;
  LOutput: TMemoryStream;
  MyIni: System.IniFiles.TMemIniFile;
  ThisFile: string;
  LZip: TZCompressionStream;
begin
  if FileSaveDialog1.Execute then
    ThisFile := FileSaveDialog1.FileName
  else EXIT;

  LInput := TMemoryStream.Create;
  LOutput := TMemoryStream.Create;
  LZip := TZCompressionStream.Create(clDefault, LOutput);
  try
    APicture.SaveToStream(LInput);
    LInput.Position := 0;
    //LOutput.Position := 0;
    LZip.CopyFrom(LInput, LInput.Size);

    MyIni := TMemIniFile.Create(ThisFile);
    try
      MyIni.WriteBinaryStream('Custom', 'IMG', LOutput);
      MyIni.UpdateFile;
    finally
      MyIni.Free;
    end;
  finally
    LInput.Free;
    LOutput.Free;
    LZip.Free;
  end;
end;

但是INI文件中没有保存流。生成的 INI 文件仅包含以下行:

[Custom]
IMG=

那么如何将压缩后的流保存到INI文件中呢?

您需要在LZip.CopyFromLOutput.Position := 0之后设置,即立即在之前

MyIni.WriteBinaryStream('Custom', 'IMG', LOutput);