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的手记》
CentOS 6中MATLAB print函数“所见非所得”bug的解决方案的更多相关文章
- 《从零开始学Swift》学习笔记(Day 7)——Swift 2.0中的print函数几种重载形式
原创文章,欢迎转载.转载请注明:关东升的博客 Swift 2.0中的print函数有4种重载形式: l print(_:).输出变量或常量到控制台,并且换行. l print(_:_:).输出 ...
- python 中的 print 函数与 list函数
print() 函数: 传入单个参数时默认回车换行,关键词 end 可以用来避免输出后的回车(换行), 或者以一个不同的字符串结束输出. >>> a, b = 0, 1 >& ...
- python中,print函数的sep和end参数
print函数是我们经常使用的,但是它的sep和end参数或许对很多python使用者相对陌生,他们可以让我们的打印更具有个性化. 先来看下官方解释, sep:分割值与值,默认是一个空格 end:附件 ...
- php中的print函数
php print函数怎么用? 定义和用法 print() 函数输出一个或多个字符串. 注释:print() 函数实际不是一个函数,所以您不必对它使用括号. 提示:print() 函数比 echo() ...
- 【转载】 tf.Print() (------------ tensorflow中的print函数)
原文地址: https://blog.csdn.net/weixin_36670529/article/details/100191674 ------------------------------ ...
- python中的print函数
python3.x中将print由一个声明转变成了一个函数. 官方说法: Converts the print statement to the print() function. print(*ob ...
- 把一下程序中的print()函数改写成
源代码: #include <iostream> using namespace std; void print( int w ) { ; i <= w ; i++ ) { ; j ...
- 为什么print在python3中变成了函数?
转自:http://www.codingpy.com/article/why-print-became-a-function-in-python-3/ 在Python 2中,print是一个语句(st ...
- python中print()函数的“,”与java中System.out.print()函数中的“+”
python中的print()函数和java中的System.out.print()函数都有着打印字符串的功能. python中: print("hello,world!") 输出 ...
随机推荐
- VirtualBox 共享文件夾
説明:host為window10,guest為centos7 一.安装VBoxLinuxAdditions 1. 在guest上挂载virtualbox安装目录下的VBoxGuestAdditions ...
- Android SDK Tools 更新
C:\WINDOWS\system32\drivers\etc\hosts 文件用记事本打开后 添加下面的 74.125.237.1 dl-ssl.google.com
- 微信小程序-基础内容组件
icon 图标 示例: <view class="group"> <block wx:for="{{iconSize}}"> <i ...
- Object-C
#import <Foundation/Foundation.h> #pragma mark 狗类的声明 @interface Dog:NSObject { @public NSStrin ...
- vnc连接kali 2.0 报错:A problem has occurred and the system can't recover.
kali版本: root@kali:~# uname -a Linux kali -kali1-amd64 # SMP Debian -7kali2 (--) x86_64 GNU/Linux 第一步 ...
- 用:hover伪类代替js的hover事件
制作二级菜单要实现鼠标移动上去显示子菜单,鼠标移出子菜单隐藏,或者其他类似需求的地方,首先我会想到用jquery的hover事件来实现,如: $(".nav").hover(fun ...
- Window 注册程序关联后缀文件,双击运行
一般来说,很多软件都会有自定义后缀的文件,比如.cpp..doc等,那么如果我们想把这些后缀与我们的软件关联起来,如何做呢 #pragma once #include "StdAfx.h&q ...
- k近邻
k近邻(k-NearestNeighbor)算法简称kNN.基本思想简单直接,对于一个需要分类的数据实例x,计算x与所有已知类别的样本点在特征空间中的距离.取与x距离最近的k个样本点,统计这些样本点所 ...
- Thread.join()方法
thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程.比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B.t.join() ...
- 转:对于一个字节(8bit)的变量,求其二进制表示中“1”的个数
转:http://toutiao.com/a4280977370/ [解法一] 可以举一个八位的二进制例子来进行分析.对于二进制操作,我们知道,除以一个 2,原来的数字将会减少一个0.如果除的过程中有 ...