2013-03-10 5 views
2

им пытаются загрузить PNG изображение в TImage с помощью библиотеки PNGImage,Загрузка PNG в TImage

каждый раз, когда я действительно

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

я получаю:

Файл считывании является недействительный образ «Portable Network Graphics» , поскольку он содержит недопустимый заголовок. Этот файл может быть поврежден, попробуйте получить его снова

Теперь я думаю, эта проблема вызвана этими линиями (из библиотеки 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, но это не работает.

+0

Я хотел бы сам исследовать этот файл PNG. Не могли бы вы сделать его доступным? –

+0

Вы имеете в виду изображение im loading? здесь: http://google.uci.edu/images/googleicon.png –

+0

Какая версия Delphi? –

ответ

7

Вы сами составляете блок PNGImage, и у вас устаревший PNGImage, предназначенный для предварительного Unicode Delphi. Это основная проблема, которая у вас есть.

Функциональность PNG теперь встроена в Delphi. Блок PNGImage является частью стандартных библиотек, которые поставляются вместе с продуктом. Просто удалите версию PNGImage. Убедитесь, что вы удаляете файлы .pas и .dcu, чтобы ваша ошибочная версия не использовалась.

Затем включите PNGImage в предложение uses в одном из ваших блоков, которое, как я полагаю, вы уже сделали. Это приведет к использованию встроенной версии используемого устройства.

+0

Ну, я попытался удалить pngimage.pas, я больше не могу скомпилировать, и я получаю «Не могу разрешить имя узла» pngimage «...» как я могу восстановить встроенный файл –

+2

@yassine_hell: я боюсь спросить ... Вы имеете в виду, что на самом деле вы удалили единственную копию «pngimage», которую вы использовали, и теперь спрашиваете, как ее восстановить? –

+0

xD idk, что я сделал, но я отремонтировал его, теперь его обратно: D –

Смежные вопросы