使用OpenGL硬件渲染器导出带有色条的MATLAB surf图会导致PNG文件损坏。

10

当我使用MATLAB将带有颜色条的2D表面图导出为png文件时,如果使用opengl硬件渲染器,则导出的图片会损坏,如下图所示:

corrupted surface plot png export from MATLAB

除此之外,其他所有功能都正常。但是,在我创建了一个带有颜色条的图后,即使它们不包含任何颜色条,我导出的所有其他表面图也会受到损坏。

MATLAB中的opengl info命令输出以下内容:

    Version         = 3.0 Mesa 10.1.0
    Vendor          = Intel Open Source Technology Center
    Renderer        = Mesa DRI Intel(R) Haswell Desktop 
    MaxTextureSize  = 8192
    Visual          = 0x20 (TrueColor, depth 24, RGB mask 0xff0000 0xff00 0x00ff)
    Software        = false
    # of Extensions = 190

    Driver Bug Workarounds:
    OpenGLBitmapZbufferBug    = 0
    OpenGLWobbleTesselatorBug = 0
    OpenGLLineSmoothingBug    = 0
    OpenGLClippedImageBug     = 0
    OpenGLEraseModeBug        = 0

我尝试了所有这些OpenGL的解决方法,但都没有帮助。

有人有什么想法来解决这个问题吗?

我的系统:

  • 内核:3.13.0-24-generic 64位
  • 处理器:Intel Haswell i7 4770K
  • 图形:Intel HD 4000
  • MATLAB版本:R2013b

在我同事的电脑上,他的电脑与我的完全相同,但操作系统不同(Debian Wheezy),这个问题并没有出现。在他的电脑上,opengl info返回:

    Version         = 2.1 Mesa 8.0.5
    Vendor          = VMware, Inc.
    Renderer        = Gallium 0.4 on llvmpipe (LLVM 0x209)
    MaxTextureSize  = 4096
    Visual          = 0xfc (TrueColor, depth 24, RGB mask 0xff0000 0xff00 0x00ff)
    Software        = false
    # of Extensions = 143

    Driver Bug Workarounds:
    OpenGLBitmapZbufferBug    = 0
    OpenGLWobbleTesselatorBug = 0
    OpenGLLineSmoothingBug    = 0
    OpenGLClippedImageBug     = 0
    OpenGLEraseModeBug        = 0

它可能是因为Gallium/llvmpipe实际上是软件渲染器,才能在他的情况下起作用吗?

色条有什么问题?


1
不清楚你为什么想要使用OpenGL?另外,你尝试过来自FileExchange的export_fig吗? - yuk
你尝试过使用 OpenGL软件 吗?图片可能不是很高清,但有时可以修复一些错误。 - Clemens
2
“文件 > 另存为…” 命令是否适用于导出为 PNG?为了保持一致性,您应该提供生成导致此情况的图形的代码。当 'Renderer' 设置为 'OpenGL' 时,是否有任何表面绘图?colorbar 是否需要存在? - horchler
1
@horchler:哇,原来是“colorbar”的问题。没有它一切都正常。在生成了一个带有colorbar的图像后,即使其他图像没有colorbar,我创建和导出的每个图像都会出现损坏的png文件。 - GriffinPeterson
@GriffinPeterson,这可能是另一个英特尔图形驱动程序问题(有相当多的这种问题),或者是由于OpenGL窗口初始化期间渲染或设备上下文设置而导致无法导出数据的问题(类似于尝试打印屏幕视频播放)。尝试使用不同的驱动程序甚至软件仿真器(如nwemulate,但我不确定它是否也适用于英特尔)来更仔细地识别问题。 - Spektre
显示剩余12条评论
1个回答

1
很遗憾,MATLAB在标准化方面表现不佳。颜色映射的问题在于,当与MATLAB以外的其他应用程序一起使用或保存时,编码图像不能轻松地为其他应用程序使用,因为MATLAB仅针对MATLAB应用程序优化映射。如果我找到一个可以帮助您的示例,我会编辑我的答案,但我希望这能解决您的问题。否则,这是MATLAB的问题,它没有正确保存图像。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接