• CentOS 6中MATLAB print函数“所见非所得”bug的解决方案


    0 系统配置+软件版本

    主机:Dell optiplex 390 MT (i5)

    系统+软件:CentOS 6.5 x64, Matlab R2012, R2013

    系统+软件:CentOS 6.7 x64, Matlab R2014
    两种组合均存在print函数打印结果不正确的问题。

    1 问题描述

    正常来讲,print会将图像句柄所指向的图片按“所见即所得”的方式打印出来,包括线条粗细和字体大小等属性。

    由于CentOS自带的显卡驱动无法很好地控制和使用板载的Nvidia显卡,无论*.fig文件中设置了怎样的字体大小,打印出来的JPEG图片都是特别特别小的字体,而*.fig中的设置完全不同。

    从CentOS 6..4一路升级到CentOS 6.7的过程中,这个问题一直没有查找到真正原因,直到最近购买了新显卡,费劲装上了它的Nvidia驱动,重新使用这个print函数制图的时候,才发现真正解决了“所见即所得”的问题。

    clf;
    x=1:100; y=x;
    plot(x,y,'b.'); hold on;; plot(x,sin(x),'g-.');
    xlabel('test x');
    ylabel('test y');
    set(findall(gcf,'Type','text'),'FontSize',20,'FontName','Timew New Roman'); % 将文字设置为20号Times New Roman字体
    set(gcf,'PaperPositionMode','auto');
    print(gcf,'-djpeg','-r600','test1.jpg');
    
    set(findall(gcf,'Type','text'),'FontSize',12,'FontName','Timew New Roman'); % 将文字设置为12号Times New Roman字体
    set(gcf,'PaperPositionMode','auto');
    print(gcf,'-djpeg','-r600','test2.jpg');

    可以用上述代码测试,看成图的结果是否满足“所见即所得”的效果。如果满足,后文可直接略过。

    2 解决办法

    2.1 显卡驱动识别

    CentOS系统默认是自带显卡驱动程序的,只是它的驱动效果并不好。如果你在matlab命令窗口输入'opengl info'命令,得到类似如下结果,可能就需要为独显单独安装相应的驱动程序了。 

    % centOS 6.5, Matlab R2013a, 系统自带的显卡驱动,Nvidia显卡的驱动未专门安装
    >> opengl info
                              Version: '2.1 Mesa 10.4.3'
                               Vendor: 'Mesa Project'
                             Renderer: 'Software Rasterizer'
                       MaxTextureSize: 16384
                               Visual: 'Visual 0x104, (RGBA 32 bits (8 8 8 8), Z depth 24 bits, H...'
                             Software: 'false'
            SupportsGraphicsSmoothing: 0
        SupportsDepthPeelTransparency: 1
           SupportsAlignVertexCenters: 0
                           Extensions: {150x1 cell}
                   MaxFrameBufferSize: 16384

     系统自带的显卡驱动,由Matlab R2013a返回的opengl信息,没有看到Nvidia显卡的名字,不可以使用硬件渲染,只能使用软件(光栅化)渲染器。

    2.2 单独安装适配的 Nvidia 显卡驱动之后

    安装 Nvidia 显卡驱动,具体过程可以参见我的另一篇博客《在CentOS 6.7中安装Nvidia GT730的手记》。文中提到不同的安装方法,如果在设置过程中遇到重启后卡在绿屏的问题,可以尝试博客中的操作过程。至于为什么会绿屏,我也不知道。。。

    安装好显卡驱动以后,Matlab R2014b 返回的 opengl 信息,显示已经加载了一块名为 'GeForce GT 730/PCIe/SSE2' 的显卡,可以使用硬件渲染和硬件加速功能。

    % centOS 6.7, Matlab R2014b, 专门安装 Nvidia 显卡驱动
    >> opengl info Version: '4.5.0 NVIDIA 352.30' Vendor: 'NVIDIA Corporation' Renderer: 'GeForce GT 730/PCIe/SSE2' MaxTextureSize: 16384 Visual: 'Visual 0x27, (RGBA 32 bits (8 8 8 8), Z depth 24 bits, Hardware acceleration, Double buffer, ...' Software: 'false' SupportsGraphicsSmoothing: 1 SupportsDepthPeelTransparency: 1 SupportsAlignVertexCenters: 1 Extensions: {316x1 cell} MaxFrameBufferSize: 16384

    3 测试

     最后,再用第1小节中的绘图命令作简单的测试,随着字体大小的调整,生成的*.jpg文件中,字体也应当随着变化的,实现了真正的“所见即所得”。

    至此,print命令的bug终于解决了!

    4 参考资料

    [1] http://www.cnblogs.com/snake553/p/4941163.html     《在CentOS 6.7中安装Nvidia GT730的手记

     

  • 相关阅读:
    leetcode 7.删除有序数组中的重复项
    python 插入排序
    C# 异常处理
    C# 正则表达式
    C# 特性(Attribute)
    C# 预处理器指令
    C# 命名空间(Namespace)
    C# 文件的输入与输出
    C# 反射(Reflection)
    Python入门示例系列37 常用函数
  • 原文地址:https://www.cnblogs.com/snake553/p/4944422.html
Copyright © 2020-2023  润新知