Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.10.2010, 10:45   #1
nXs
Форумчанин
 
Регистрация: 26.02.2010
Сообщений: 126
По умолчанию PNG

Здравствуйте, вопрос, почему при загрузки PNG из потока вываливает ошибку:
Код:
raised exception class EPNGHeaderNotPresent with message 'This operation is not valid because the current image contains no valid header.'
Код загрузки:
Код:
for i:=0 to 20 do
F.Read(C[i].Cpos,sizeof(C[i].CPos));

for i:=0 to 20 do
F.Read(C[i].CName,sizeof(C[i].CName));

for i:=0 to 20 do
begin
F.Seek(C[i].CPos,0);
Image[i]:=TImage.Create(self);
Image[i].Picture.Graphic:=TPngObject.Create;
Image[i].Picture.Graphic.LoadFromStream(F);
end;
Код сохранения:
Код:

tmp:=F.position;
for i:=0 to 20 do
F.Write(images[i].Cpos,sizeof(images[i].CPos));

for i:=0 to 20 do
F.Write(images[i].CName,sizeof(images[i].CName));

for i:=0 to 20 do
begin
Images[i].CPos:=F.position;
Im.Picture.LoadFromFile(FileName[i]);
images[i].CPicture:=TPngObject.Create;
if (IM.Picture.Graphic is TJpegImage) then
(IM.Picture.Graphic as TJpegImage).DIBNeeded;
B.Assign(Im.Picture.Graphic);
Images[i].CPicture.Assign(B);
Images[i].CPicture.SaveToStream(F);
Im.Destroy
end;

F.seek(tmp,0);

tmp:=F.position;
for i:=0 to 20 do
F.Write(images[i].Cpos,sizeof(images[i].CPos));

for i:=0 to 20 do
F.Write(images[i].CName,sizeof(images[i].CName));

Последний раз редактировалось nXs; 31.10.2010 в 12:51.
nXs вне форума Ответить с цитированием
Старый 31.10.2010, 12:39   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а где обнуление позиции потока?
Код:
F.Position:=0;
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 31.10.2010, 12:53   #3
nXs
Форумчанин
 
Регистрация: 26.02.2010
Сообщений: 126
По умолчанию

Извините пожалуйста,я дописал код чтения/записи(первый раз непонятно как то написал). Поэтому позицию начала рисунка я устанавливаю перед его чтением... И тогда для чего его обнулять если перед каждым чтением позиция устанавливается в позицию начала картинки?
nXs вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
рисование png dmitriegorovih Общие вопросы Delphi 8 03.08.2010 12:50
PNG _-Re@l-_ Общие вопросы Delphi 8 15.07.2010 16:48
Ковертирование из png 24 бит в png 8 бит isat Общие вопросы .NET 0 22.03.2010 13:38
*.png Killbrum Помощь студентам 3 30.08.2008 15:51
Png Witaliy Мультимедиа в Delphi 3 25.05.2008 23:10