gpt4 book ai didi

delphi - TPNGImage.LoadFromFile EPNGInvalidFileHeader

转载 作者:行者123 更新时间:2023-12-03 18:25:55 26 4
gpt4 key购买 nike

我得到了一个 .png 文件,该文件在 Windows 资源管理器中正确呈现,但不会加载到我的应用程序中。每当我尝试加载文件时,它都会抛出 EPNGInvalidFileHeader异常(exception),这是简单的加载代码。

uses Vcl.Imaging.PngImage;

var
image: TPngImage;
begin
image := TPngImage.Create();
try
image.LoadFromFile('somefile');
finally
image.Free();
end;
end;

因此,查看 LoadFromFile 中引发异常的位置带我去
const
PngHeader: Array[0..7] of AnsiChar = (#137, #80, #78, #71, #13, #10, #26, #10);

procedure TPngImage.LoadFromStream(Stream: TStream);

...

{Reads the header}
Stream.Read(Header[0], 8);

{Test if the header matches}
if Header <> PngHeader then
begin
RaiseError(EPNGInvalidFileHeader, EPNGInvalidFileHeaderText);
Exit;
end;

...

我拥有的文件的标题实际上是 [255, 216, 255, 224, 0, 16, 74, 70]这当然不是有效的 PNG 文件头。在记事本中打开文件会显示似乎是 adobe photoshop 元信息,并引用了 Exif。和一些 XML
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 5.4.0">
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about="" xmlns:photoshop="http://ns.adobe.com/photoshop/1.0/" photoshop:DateCreated="2017-04-04T19:38:31"/>
</rdf:RDF>
</x:xmpmeta>

所以在所有这些解释之后,我的问题是 如何加载这个明显有效的 png 图像。 Windows Explorer、Paint、Gimp、Windows Photos 都可以渲染图像,但我无法在我的 delphi 应用程序中加载它。

Here is the test file (是的,它全是白色的,因为我不得不从中删除信息)

最佳答案

The header for the file I have is actually [255, 216, 255, 224, 0, 16, 74, 70] which is of course not a valid PNG file header.



不,它是一个 JPEG header (您提供的链接是一个名为 testimage.jpg 的文件)。这解释了为什么 TPNGImage失败。

使用 Vcl.Imaging.jpeg.TJPEGImage 反而。或者更好,使用 Vcl.Graphics.TWICImage 并让它为您计算出图像类型。

关于delphi - TPNGImage.LoadFromFile EPNGInvalidFileHeader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43772983/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com