在我的 Delphi 应用程序中,我创建了一个 PNG 文件,其中还包含一些文本作为键值对:
procedure TFrmMain.SaveasPNG1Click(Sender: TObject);
var
Png: TPngImage;
begin
if SaveDialog1.Execute then
begin
Png := TPngImage.Create;
try
Png.Assign(Image1.Picture.Graphic);
Png.AddtEXt('SomeKey', 'SomeValue'); // <-- adding text
Png.SaveToFile(SaveDialog1.FileName);
finally
Png.Free;
end;
end;
end;
但是,我似乎找不到任何 TPNGimage 方法 来读回数据。有没有办法在我的应用程序中读回数据? (我正在使用 Delphi 11 Alexandria)
Png.AddEXt
时,会创建
TChunkTEXT
类型的新数据块,并将您的数据分配给它。您可以通过使用 Png.Chunks.FindChunk
方法查找此数据块从 PNG 检索此类数据,其中将
TChunkTEXT
类作为参数传递给上述方法。因此检索此类数据的代码将如下所示
var TextChunk: TChunkTEXT;
...
TextChunk := TChunkTEXT(Png.Chunks.FindChunk(TChunkTEXT));
SomeKey := TextChunk.Keyword
SomeValue := TextChunk.Text;
FindChunk
方法的唯一问题是它只能找到与指定类匹配的第一个块,因此即使可以通过多次调用
Png.AddEXt
来保存多个键值对,也只能检索第一个键值对。 为了检索从 PNG 存储的多个键值对,您必须手动迭代所有块并从文本块中检索数据。
所以代码看起来像这样
for I := 0 to Png.Chunks.Count-1 do
begin
if Png.Chunks.Item[I] is TChunkTEXT then
begin
TextChunk := TChunkTEXT(Png.Chunks.Item[I]);
Memo1.Lines.Add(TextChunk.Keyword+'='+TextChunk.Text);
end;
end;