阅读' .bmp'时出现无法解释的警告。 matlab指南中的文件

时间:2014-03-21 13:41:07

标签: matlab matlab-guide steganography

我已经编写了一个matlab文件(.m),用于执行我最后一年项目的stegnography。

我在matlab中使用GUIDE为项目设计了一个GUI。

程序在脚本模式下运行时运行正常,但在GUIDE模式下运行时会出现以下错误:

  

警告:偏移位置38处的图像文件目录没有条目且已被忽略

有人可以帮我吗?

1 个答案:

答案 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);
    
  • 重复投掷操作

  • 重复应该遵循的所有操作

这远非理想,所以如果可以避免,请使用前一种方法。只需尝试一下,找到适合您需求的产品。