首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将PNG加载到TImage

将PNG加载到TImage
EN

Stack Overflow用户
提问于 2013-03-10 11:22:57
回答 1查看 17.5K关注 0票数 3

我试图使用TImage库将PNG映像加载到PNGImage中,

每次我都这么做

代码语言:javascript
复制
Image1.Picture.LoadFromFile('c:\c.png');

我得到:

正在读取的文件不是有效的“可移植网络图形”图像,因为它包含无效的标头。此文件可能已损坏,请再次尝试获取它。

现在,我想这个问题是由这些行(来自PngImage库)引起的:

代码语言:javascript
复制
{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,但没有成功。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-10 11:27:38

您正在自己编译PNGImage单元,并且您有一个为预Unicode设计的过时的PNGImage。这是你面临的根本问题。

PNG功能现在内置到Delphi中。PNGImage单元是随产品附带的标准库的一部分。只需删除PNGImage代码的版本即可。确保删除.pas和.dcu文件,以便不能使用错误的版本。

然后将PNGImage包含在一个单元中的uses子句中,我猜您已经这样做了。这将导致所使用的单元的内置版本。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15321669

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档