读回添加到PNG图像的文本数据

问题描述 投票:0回答:1

在我的 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)

delphi png
1个回答
0
投票
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;

© www.soinside.com 2019 - 2024. All rights reserved.