2013-03-10 58 views
2

我嘗試每一次我都加載PNG到的TImage

Image1.Picture.LoadFromFile('c:\c.png'); 

我得到一個PNG圖像加載到使用PNGImage庫的TImage,

正在讀取的文件不是有效的「便攜式網絡圖形」圖像 ,因爲它包含無效的標頭。該文件可能已損壞,嘗試 再次獲得它

現在,我想這個問題是由這些線(從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; 

我試圖改變字符到ANSIChar一致,但它沒有工作。

+0

我很想自己調查此PNG文件。你能否讓它可用? – 2013-03-10 11:23:57

+0

您的意思是圖片im loading?這裏:http://google.uci.edu/images/googleicon.png – 2013-03-10 11:24:51

+0

哪個版本的Delphi? – 2013-03-10 11:25:23

回答

7

您正在自己編譯PNGImage單元,並且您已經爲預編碼的Delphi設計過時的PNGImage。這是你的根本問題。

PNG功能現在嵌入到Delphi中。 PNGImage單元是隨產品一起提供的標準庫的一部分。只需刪除您的PNGImage代碼版本即可。確保您刪除了.pas和.dcu文件,以便您的錯誤版本無法使用。

然後在你的一個單元中的一個uses子句中包含PNGImage,我猜你已經這麼做了。這將導致正在使用的單元的內置版本。

+0

嗯,我試圖刪除pngimage.pas,我不能編譯了,我得到「無法解析單位名稱」pngimage「...」我如何恢復內置的 – 2013-03-10 11:36:10

+2

@yassine_hell:我不敢問......你的意思是你真的刪除了你正在使用的'pngimage'的唯一副本,現在正在詢問如何取消刪除它? – 2013-03-10 12:30:21

+0

xD idk我做了什麼,但我修復了它,現在它的後面:D – 2013-03-10 12:33:04