3

PNGImageライブラリを使用してPNG画像をTImageに読み込もうとしています。

毎回

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に変更しようとしましたが、機能しませんでした。

4

1 に答える 1

9

PNGImageユニットを自分でコンパイルしていて、Unicode以前のDelphi用に設計された古いPNGImageがあります。それがあなたが抱えている根本的な問題です。

PNG機能がDelphiに組み込まれました。PNGImageユニットは、製品に付属している標準ライブラリの一部です。PNGImageコードのバージョンを削除するだけです。誤ったバージョンを使用できないように、.pasファイルと.dcuファイルを必ず削除してください。

次に、ユニットの1つにあるuses句にPNGImageを含めます。これは、すでに行っていると思います。これにより、ユニットの組み込みバージョンが使用されます。

于 2013-03-10T11:27:38.923 に答える