我试图使用TImage库将PNG映像加载到PNGImage中,
每次我都这么做
Image1.Picture.LoadFromFile('c:\c.png');我得到:
正在读取的文件不是有效的“可移植网络图形”图像,因为它包含无效的标头。此文件可能已损坏,请再次尝试获取它。
现在,我想这个问题是由这些行(来自PngImage库)引起的:
{Characters for the header}
const
PngHeader: Array[0..7] of Char = (#137, #80, #78, #71, #13, #10, #26, #10);
{Loads the image from a stream of data}
procedure TPngObject.LoadFromStream(Stream: TStream);
var
Header : Array[0..7] of Char;
HasIDAT : Boolean;
{Chunks reading}
ChunkCount : Cardinal;
ChunkLength: Cardinal;
ChunkName : TChunkName;
begin
{Initialize before start loading chunks}
ChunkCount := 0;
ClearChunks();
{Reads the header}
Stream.Read(Header[0], 8);
{Test if the header matches}
if Header <> PngHeader then
begin
RaiseError(EPNGInvalidFileHeader, EPNGInvalidFileHeaderText);
Exit;
end;我试着将Char改为AnsiChar,但没有成功。
发布于 2013-03-10 11:27:38
您正在自己编译PNGImage单元,并且您有一个为预Unicode设计的过时的PNGImage。这是你面临的根本问题。
PNG功能现在内置到Delphi中。PNGImage单元是随产品附带的标准库的一部分。只需删除PNGImage代码的版本即可。确保删除.pas和.dcu文件,以便不能使用错误的版本。
然后将PNGImage包含在一个单元中的uses子句中,我猜您已经这样做了。这将导致所使用的单元的内置版本。
https://stackoverflow.com/questions/15321669
复制相似问题