使用 opengl 硬件渲染器导出带有颜色条的 MATLAB 冲浪图会导致损坏的 png 文件

Posted

技术标签:

【中文标题】使用 opengl 硬件渲染器导出带有颜色条的 MATLAB 冲浪图会导致损坏的 png 文件【英文标题】:Exporting MATLAB surf plots with colorbars results in corrupted png files using opengl hardware renderer 【发布时间】:2014-06-25 19:18:00 【问题描述】:

当我将带有颜色条的 2D 曲面图从 MATLAB 导出到 png 文件时,会导致损坏 我使用 opengl 硬件渲染器时的图像,如下所示:

其他一切正常。但是在我用彩条创建了一个人物之后,所有 我导出到 png 文件的其他曲面图已损坏,即使它们不包含 任何颜色条。

opengl info 在 MATLAB 中给出以下输出:

    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-通用 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 是现实中的软件渲染器?

颜色条有什么问题?

【问题讨论】:

不成功的导出是怎么做的? print 命令? @Raab70 使用print(...,'-r300','-dpng') 和使用图形菜单中的“导出设置”都会得到相同的结果。 不清楚为什么要使用OpenGL?您还尝试过 FileExchange 中的export_fig 吗? “文件 > 另存为...”命令是否适用于导出到 PNG?为了保持一致性,您应该提供代码来生成导致这种情况的图形。当'Renderer' 设置为'OpenGL' 时,是否有任何曲面图? colorbar 需要在场吗? @horchler:哇。它是“颜色条”。没有它,一切正常。在生成一个带有颜色条的图形后,我创建和导出的每个其他图形都会损坏 png,即使它们没有任何颜色条。 【参考方案1】:

不幸的是,MATLAB 在标准化方面并不出色,颜色映射的问题在于,当保存或不与 MATLAB 以外的其他东西一起使用时,编码图像不会被保存或生成以便于其他应用程序使用,因为MATLAB 仅优化 MATLAB 应用程序的映射,如果我确实找到了可以帮助您的示例,我将编辑我的答案,但我希望这能对您的问题有所帮助。

否则它的 matlabs 错误,它不能正确保存图像。

【讨论】:

以上是关于使用 opengl 硬件渲染器导出带有颜色条的 MATLAB 冲浪图会导致损坏的 png 文件的主要内容,如果未能解决你的问题,请参考以下文章

OpenGLES渲染颜色问题

使用 OpenGL 和顶点数组对象渲染两个对象

OpenGL 帧缓冲区 - 渲染到纹理创建带有主帧缓冲区内容的纹理

OpenGL 帧缓冲区缺失面

带有片段着色器的OpenGL 3.3不同颜色

使用现代 OpenGL 渲染纹理