我已经编写了一个matlab文件(.m),用于执行我最后一年项目的stegnography。
我在matlab中使用GUIDE为项目设计了一个GUI。
程序在脚本模式下运行时运行正常,但在GUIDE模式下运行时会出现以下错误:
警告:偏移位置38处的图像文件目录没有条目且已被忽略
有人可以帮我吗?
答案 0 :(得分:0)
BMP文件? JPG / TIFF文件?
听起来像你有一个腐败的图像标题;另请参阅MATLAB答案中的this thread。
您可以使用简单的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
:
取消警告:
warning(warnSts);
warnSts = warning('off', warnID);
重复投掷操作
这远非理想,所以如果可以避免,请使用前一种方法。只需尝试一下,找到适合您需求的产品。