- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我得到了一个 .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>
最佳答案
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.
testimage.jpg
的文件)。这解释了为什么
TPNGImage
失败。
Vcl.Imaging.jpeg.TJPEGImage
反而。或者更好,使用
Vcl.Graphics.TWICImage
并让它为您计算出图像类型。
关于delphi - TPNGImage.LoadFromFile EPNGInvalidFileHeader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43772983/
我有一个函数,它接受 TPicture 作为参数并返回 TPngImage。为了保留原始图像,我创建了一个 TPngImage 并将 TPicture 复制到 TPngImage,应用效果并返回 TP
我得到了一个 .png 文件,该文件在 Windows 资源管理器中正确呈现,但不会加载到我的应用程序中。每当我尝试加载文件时,它都会抛出 EPNGInvalidFileHeader异常(except
我正在使用 VCL TPNGImage 类加载 PNG 图像。如果我使用 FindClass(S).Create 创建 TPNGImage 对象(S 是一个 String,它可能包含'TPNGImag
我从这个看discussion和尼克·霍奇斯 blog ,TPngImage 已被导入 Delphi 中。这一切都很棒,但是我们有一个项目停留在 D2005 中,我们需要进行从 PNG 到 BMP 的
使用 Delphi 2010,您可以使用 获取 jpg 文件的像素格式 TJPEGImage ( Image.Picture.Graphic ).PixelFormat 有没有办法获取 TPNGIm
我有一个由 11 个白色 TBitmap 组成的数组(32 位 512x512 像素 = 1 MB)我想将它们分配给 TPngImage 数组以减少内存使用,我预计 1 mb 白色位图会变成 1.76
在 Delphi 10.4 中,我在设计时在 PNG 的 Picture 属性中加载了一个 TImage 图像(具有 Alpha channel 透明度的 32BPP)。这是它在运行时的样子: 这是
我可以在从某处加载 TPngImage 并在某处绘制它之间直接修改 TPngImage 的每像素 alpha 数据吗?如果是这样,怎么办?谢谢。 最佳答案 是的,我认为这很容易。 例如,此代码会将图像
我有一个函数,可以将 TBitmap(我绘制的)转换为 TPngImage,然后将其保存到流中,以便其他方法可以使用它。使用 Png 是因为它为报告输出(excel、html)创建较小的图像。问题是
当我使用位图调用canvas.stretchdraw时,位图将在左>右时镜像/翻转。 PNG 不会发生这种情况。这是一个错误吗?我可以做什么来修复它? 要复制,请尝试以下代码: procedure T
如何将 FMX.Graphics.TBitmap 转换为 VCL.Graphics.TBitmap 或 Vcl.Imaging.PngImage.TPngImage? 我的项目中有FMX表单和VCL表
我是一名优秀的程序员,十分优秀!