首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从inifile加载png图像的问题

从inifile加载png图像的问题
EN

Stack Overflow用户
提问于 2014-12-21 16:32:33
回答 2查看 913关注 0票数 1

我使用以下代码将PNG图像存储到Ini文件中:

代码语言:javascript
复制
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;

为了在另一种形式的OnShow事件中显示图片,我使用了相同的方法:

  1. 在TMemoryStream对象中加载数据

  1. 将数据从MemoryStream加载到TPngImage对象

  1. 在TImage组件中显示图片 过程TfrmLoadPicture.FormShow(发件人: 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);最终PNG.Free;终结;最终MS.Free;终结;最终IniFile.Free;终结;终结;

但是,我总是得到异常错误:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-21 16:57:22

TIniFile对它可以读取的任何一个值的大小都有一个硬编码上限,部分原因是底层的Windows (GetPrivateProfileString和朋友)不允许查询保存值的大小。IMO TIniFile确实应该在尝试编写更大的值时引发一个例外,但是无论如何,如果您使用TMemIniFile而不是TIniFile,您应该会很好(我刚刚尝试过)。

票数 5
EN

Stack Overflow用户

发布于 2014-12-21 17:49:55

克里斯回答了你直接问的问题。我还有其他的评论。

不需要对PNG进行解码就可以将其传输到INI文件

您可以直接复制文件,而不需要解码PNG,然后重新编码。

代码语言:javascript
复制
Stream := TFileStream.Create(FileName, fmOpenRead);
try
  IniFile.WriteBinaryStream('REPORT_HEADER', 'LOGO', Stream);
finally
  Stream.Free;
end;

十六进制编码不是有效的

WriteBinaryStream不是将二进制文件编码为文本的非常有效的方法。实际上,您使用的是base16,使用base64将更加传统和高效。

我建议您将二进制文件流编码为base64字符串,并将该字符串写入INI文件。

INI文件不适合二进制数据

INI文件从未被用于存储大型二进制blobs。在第一次检查时,您试图将PNG图像塞进INI文件中,这似乎很奇怪。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27591371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档