我使用以下代码将PNG图像存储到Ini文件中:
procedure TfrmParametres.SaveIni;
var
IniFile: TIniFile;
MS: TMemoryStream;
PNG: TPngImage;
begin
IniFile := TIniFile.Create(IniFileName);
try
PNG := TPngImage.Create;
try
PNG.LoadFromFile(edtLogo.Text);//edtlogo contain image file path
MS := TMemoryStream.Create;
try
PNG.SaveToStream(MS);
MS.Seek(0, 0);
IniFile.WriteBinaryStream('REPORT_HEADER', 'LOGO', MS);
finally
MS.Free;
end;
finally
PNG.Free;
end;
finally
FreeAndNil(IniFile);
end;
end;
Run Code Online (Sandbox Code Playgroud)
并以另一种形式显示图片OnShow事件我使用相同的方法:
在TImage组件中显示图片
procedure TfrmLoadPicture.FormShow(Sender: TObject);
var
IniFile: TIniFile;
MS: TMemoryStream;
PNG: TPngImage;
begin
IniFile:= TIniFile.Create(frmParametres.IniFileName);
try
MS:= TMemoryStream.Create;
try
IniFile.ReadBinaryStream('REPORT_HEADER', 'LOGO', MS);
PNG := TPngImage.Create;
try
MS.Seek(0, 0);
PNG.LoadFromStream(MS);
Image.Picture.Assign(PNG);
finally
PNG.Free;
end;
finally
MS.Free;
end;
finally
IniFile.Free;
end;
end;
Run Code Online (Sandbox Code Playgroud)但是我总是得到异常错误:
TIniFile有一个硬编码上限,它可以读取任何一个值的大小,部分原因是底层Windows API(GetPrivateProfileString和朋友)不允许查询保存值的大小.IMO TIniFile应该在试图写出更大的值时提出异常,但无论如何,如果你使用TMemIniFile而不是TIniFile你应该没问题(我刚试过).
| 归档时间: |
|
| 查看次数: |
686 次 |
| 最近记录: |