Ошибка Delphi — JPEG # 53

#delphi #jpeg #delphi-10.3-rio

#delphi #jpeg

Вопрос:

Временные рамки.Изображение.Загрузка из файла (‘File.jpg ‘);

но я получил ошибку JPEG # 53! в чем причина этой ошибки?

Ответ №1:

Обычно это происходит, когда изображение в формате Jpeg загружается из Интернета и загрузка не завершена на 100%. Это может произойти даже с временным интервалом. К сожалению, у Jpeg нет контрольной суммы для проверки.

Единственное, что вы можете сделать, это всякий раз, когда выдается эта ошибка, перехватывать ее и отображать более отзывчивое сообщение типа «Изображение повреждено»..

Поскольку это вызывает ошибку:

 procedure JpegError(cinfo: j_common_ptr); {$IFDEF LINUX} cdecl; export; {$ENDIF}
begin
  raise EJPEG.CreateFmt(sJPEGError,[cinfo^.err^.msg_code]);
end;
 

где

 sJPEGError = 'JPEG error #%d';
 

вы можете попытаться перехватить ошибку EJPEG и проверить наличие # 53 в сообщении.

Поскольку EJPEG наследуется от EInvalidGraphic, вы можете просто перехватить его с помощью

 catch
  on E: EInvalidGraphic do
  begin
    ShowMessage('Image file is corrupted.')
  end;
end;
 

Комментарии:

1. Файлы JFIF / JPEG можно проверить на неполноту: EOI должен появиться сегмент . Кроме того, повреждение файла не ограничивается неудачными загрузками.

Ответ №2:

Это происходит с одним изображением в формате jpeg или со всеми файлами jpeg, которые вы пытаетесь использовать?

Ошибка JPEG # 53 ошибка появится из-за нехватки памяти.

Если файл поврежден, может возникнуть эта ошибка.

Таким образом, открытие этого изображения в paint или photoshop и повторное сохранение его в формате jpeg может решить проблему.

Ответ №3:

У меня также была ошибка # 53. Оказалось, что ошибка возникла только после того, как я ошибочно сохранил растровое изображение с расширением * .jpg . Очевидным решением было превратить это растровое изображение в формат jpeg и сохранить его затем :-).

Ответ №4:

Пожалуйста, попробуйте выполнить следующее, чтобы решить «ошибку JPEG # 53», если она возникает при этом утверждении TImage.Picture.LoadFromFile('File.jpg')

 TImage.Picture.Bitmap.LoadFromFile('File.jpg');
 

Обратите внимание, что файл File.jpg должно существовать в указанном месте.

Комментарии:

1. Это просто неправильно. Как можно TBitmap ожидать загрузки JPEG? TBitmap может загружать, хм, растровые изображения. [хотя отрицательный результат не мой]

Ответ №5:

моя проблема решена с помощью TAdvPicture componenet.

Комментарии:

1. Не могли бы вы упомянуть, как вы решили свою проблему с помощью TAdvPicture, я также получаю ошибку аналогичного типа, но изображение вообще не повреждено. Я могу просматривать данные изображения в SQLite и правильно извлекать изображение в другом программном обеспечении. Не уверен, почему я получаю JPEG Error #53

2. TAdvPicture просто не вызовет ошибку, он отобразит изображение как можно лучше, а затем остановится. Я также вернулся к этому в качестве решения, поскольку я не могу остановить ошибку с помощью попытки… Кроме того, и я действительно не хочу менять код в Vcl. TAdvPicture является компонентом программного обеспечения TMS (это не реклама)

3. Если кому-то нужен компонент, можно было бы найти, если бы вы правильно решили эту проблему с достаточным объяснением, а затем рассказали о каком-то компоненте, у меня не было проблем, но это: вы просто описали проблему как вопрос, и вдруг вы находите компонент, и SHAZAM что-нибудь просто работает!!! Здесь это неправильно.

4. Даже не связывая компонент: 1.3 от 2003 и 10.7 от 2022