【问题标题】:Unexplained warning when reading a '.bmp' file in matlab GUIDE在 matlab GUIDE 中读取“.bmp”文件时出现无法解释的警告
【发布时间】:2014-04-28 22:04:48
【问题描述】:

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

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

该程序在脚本模式下运行时运行良好,但在 GUIDE 模式下运行时出现以下错误:

警告:偏移位置 38 处的图像文件目录的条目为零,已被忽略

谁能帮我解决这个问题?

【问题讨论】:

    标签: matlab matlab-guide steganography


    【解决方案1】:

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

    • 重复所有应遵循的操作

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

    【讨论】:

    • @AneeshK:图片不是,但它的标题似乎是。
    • @AneeshK:最后,您是否想用这些信息打扰您的用户,这取决于您。大多数浏览器和图像显示程序都不会打扰,但更专业的应用程序肯定会。
    • 感谢您提供非常丰富的答案。我将尝试使用不同的文件格式并发布我的经验。我不明白你的问题'BMP 文件? JPG/TIFF 文件?'
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-21
    • 1970-01-01
    • 1970-01-01
    • 2021-11-21
    • 2013-02-18
    • 1970-01-01
    相关资源
    最近更新 更多