BMP-файл? файла JPG/TIFF?
Мне кажется, у вас поврежден заголовок изображения; см. также эту тему на MATLAB Answers.
Вы можете использовать простую warning('off', warnId);
, чтобы подавить предупреждение, потому что это не влияет на правильное функционирование вашей программы, но может запутать ваших пользователей.
Лично я бы не стал скрывать предупреждение, а сформулировал его так:
%// do your operations here
%// directly after the operation issuing the warning, do this:
[warnMsg,warnID] = lastwarn;
if strcmpi(warnID, 'known_ID_of_your_warning')
warndlg(...
getReport(MException(warnID,warnMsg), 'extended', 'hyperlinks', 'on'), ...
'Possible file corruption detected');
end
Это выглядит намного более профессионально, но по-прежнему предупреждает ваших пользователей о любых потенциальных проблемах, которые просто не зависят от приложения.
ПРИМЕЧАНИЕ. Я не знаю подробностей, но в некоторых ситуациях этот подход может дать сбой (например, может быть выдано более одного предупреждения, но они внутренне подавлены (см. почему это плохая практика?)) В таком случае lastwarn
нельзя доверять. Затем вам нужно будет использовать следующую (недокументированную) конструкцию:
%// change warning into error...
warnSts = warning('error', warnID);
%// ...so that it can be caught:
try
%// ... do operations here
catch ME
warndlg(...
getReport(ME, 'extended', 'hyperlinks', 'on'), ...
'Possible file corruption detected');
end
warning(warnSts);
Проблема в том, что выполнение бросающего приложения останавливается сразу после выдачи предупреждения; операция завершается преждевременно и, таким образом, не завершает свою задачу. Итак, вам нужно сделать следующее внутри catch
:
Что далеко от идеала, поэтому, если вообще можно избежать, используйте первый метод. Просто поэкспериментируйте немного и найдите то, что соответствует вашим потребностям.
person
Rody Oldenhuis
schedule
21.03.2014