![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
JPEG error + on E: Exception
SIV5000 © (2011-07-12 16:36:00)Народ привет. Подскажите пожалуйста как обработать Exception при загружке попорченого JPEG файла (exception class EJPEG with message 'JPEG error #42'.).
Кажеться правильно но что интересно так ето то что ошибка возникает не при JPG.LoadFromFile а при Image1.Picture.Assign.
var
JPG:TJpegImage;
begin
JPG:= TJpegImage.Create;
JPG.LoadFromFile('C:\Sony\DSC05107.jpg');
try
Image1.Picture.Assign(JPG);
except
on E: Exception do begin
JPG.free;
end;
end;
JPG.free;
end;
Юрий Зотов (2011-07-13 13:21:00) [21]> SIV5000 (12.07.11 20:48) [3]
> Окно то и должно по идее в "except on E: Exception" не появляться (что мне и надо).
Прятать ошибки - это ОЧЕНЬ плохая практика.
Andy BitOff (2011-07-12 23:19:00) [22]> Так как же отловить это?
http://www.codenet.ru/progr/formt/jpeg_13.php
SIV5000 (2011-07-12 22:59:00) [23]Короч. Заметил что глюк этот только (пока что) с "JPEG error #42". С другими ошибками не наблюдаеться.
Експеремент:
Открываю блокнот и сохраняю текстовой файл с расширением .jpg (пусть будет 000.jpg)
Вот такой вариант кода работает если ошибка "JPEG error #53"
var
JPG:TJpegImage;
begin
JPG:= TJpegImage.Create;
try
JPG.LoadFromFile('C:\Sony\000.jpg'); но возникает Exception здесь, при загрузке, а при ошибке #42 - в следующей строчке
Image1.Picture.Assign(JPG);
except
on E:Exception do begin
JPG.LoadFromFile('D:\Pictures\Films\ph-10167.jpg');
Image1.Picture.Assign(JPG);
end;
end;
JPG.Free;
end;
Так как же отловить это?
Могу скинуть ту попорченую картинку с примером, если поможет.
DVM (2011-07-12 21:01:00) [24]
> Вот с иконками Exception выплывает сразу после неудачной
> загрузки а с .jpg только когда Assign.
декодирование происходит в этот момент вероятно, а до этого момента JPEG данные просто лежат в Stream
SIV5000 (2011-07-12 20:48:00) [25]
> в данном случае не видно, чтобы какие-то особые
Ну это так, упрощенный вариант, самая "Суть"
> Юрий Зотов
Нифига. JPG то освобождаеться, но выдает окно с "JPEG error #42". Окно то и должно по идее в "except on E: Exception" не появляться (что мне и надо).
Просто уже есть похожий код для обаботки иконки но там Exception перехватываеться и все ОК. А с .jpg какая то фигня. Вот с иконками Exception выплывает сразу после неудачной загрузки а с .jpg только когда Assign.
Может виноват TImage, но тут он просто для примера а на самом деле использую TBitmap.Assign(TJpegImage). Итам тот же результат !!!
Так как же ето сделать???
Юрий Зотов (2011-07-12 16:41:00) [26]
JPG:= TJpegImage.Create;
try
JPG.LoadFromFile('C:\Sony\DSC05107.jpg');
Image1.Picture.Assign(JPG);
finally
JPG.free;
end;
MBo (2011-07-12 16:40:00) [27]в данном случае не видно, чтобы какие-то особые действия при исключения делались, так что try-finally будет разумно использовать.