【发布时间】:2014-04-28 22:04:48
【问题描述】:
我已经编写了一个 matlab 文件 (.m),用于为我最后一年的项目执行隐写术。
我在 matlab 中使用 GUIDE 为项目设计了一个 GUI。
该程序在脚本模式下运行时运行良好,但在 GUIDE 模式下运行时出现以下错误:
警告:偏移位置 38 处的图像文件目录的条目为零,已被忽略
谁能帮我解决这个问题?
【问题讨论】:
标签: matlab matlab-guide steganography
我已经编写了一个 matlab 文件 (.m),用于为我最后一年的项目执行隐写术。
我在 matlab 中使用 GUIDE 为项目设计了一个 GUI。
该程序在脚本模式下运行时运行良好,但在 GUIDE 模式下运行时出现以下错误:
警告:偏移位置 38 处的图像文件目录的条目为零,已被忽略
谁能帮我解决这个问题?
【问题讨论】:
标签: matlab matlab-guide steganography
BMP 文件? JPG/TIFF 文件?
在我看来,您的图片标题已损坏;另请参阅 MATLAB Answers 上的 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);
重复投掷操作
这远非理想,所以如果可以避免,请使用前一种方法。只需尝试一下,然后找到适合您需求的。
【讨论】: