getframe在Vista和Win7中执行的问题

原文链接


想把动态显示的脑地形图保存为AVI格式,结果getframe得到的图像很奇怪,包含了后面的背景,而且一直都只是获取第一组图,看了下面的文章选择改系统设置的方法已经成功保存avi


前两天一个答辩,想用Matlab做一个gif的动画,可是发现总是有问题,试了我之前在博客中总结的生成的gif的各种方法,就是不行,郁闷!最后只得截了张图,要是有动画,效果多少会更好点。

   心里着实不爽,岂不以后用matlab生成不了动画了,介肿么可以?今天有点时间好好查查了,问题也算解决了吧!

   这实际上是Vista、Win7的Aero功能的原因。Matlab在Win7下直接执行getframe函数帮助中的例子动画代码,结果如下

image

动画就是一张图,还有透明效果,底下的字都能看到!

   Matlab的例子代码都有问题,这估计是matlab与系统的兼容问题了,于是装了个最新版的matlab2011b,心想最新版的可能会解决此问题,安装后发现还是老样子。看来Matlab的最新版并没有发现此问题啊!

  在google里搜(中文),发现有人有一样的问题,但没人给出解答,于是用英文搜,好,这回有答案了(看来百度不如google,google中文搜索不如英文搜索啊!!!)http://www.mathworks.com/matlabcentral/newsreader/view_thread/161240,这里有人问同样的问题,有几种解决方法(发现这个问题是2007年问的,到现在matlab还没修正这个bug,4年时间matlab软件都编出来了,一个简单的bug没有修正,至少你在帮助里给出解决方案啊…),下面小结一下:

 

问题的原因:可能是Vista的Aero色彩方案和matlab不兼容

解决方法:

方法1:打开figure后,插入如下代码

set(gcf, 'Renderer','painters');

这个可能会使运算减慢,但figure会看起来更好,而同时不幸的是一些显示特性将会失去,如当使用patch命令绘制填充的多边形时,alpha通道效果将被忽略。

测试发现这种方法确实能解决问题。

 

方法2:关闭一些桌面效果

桌面上右击我的电脑,点击属性,选择高级系统设置,在系统属性对话框下选择高级选项卡,点击性能下的设置…按钮,如下

image

弹出性能选项对话框如下

image

在视觉效果选项卡下关闭“启动桌面组合”功能,确定。测试会发现matlab这回正常了,在我的机器上是这样,因为这个选项负责好看的奇特的半透明标题效果。如果还是不行,可以再去掉“在窗口和按钮上使用视觉样式”选项试试,如果还是不行,那就在上面的单选框中选择为“调整为最佳性能”,一般这样问题都会解决,当然这样的代价是你的Aero效果会比较差。

 

方法3:将windows的Aero功能去掉

其实和上面的方法类似,就是限制Aero效果,这里是改变桌面的方案为基本Basic模式,就可以了,其实就相当于上面的选择最佳性能模式。原因是:Aero使matlab绘制并抓取图像时并没有使其他程序“销毁”…有点难翻译啊,还是贴出来原文解释吧

It seems that Aero allows Matlab to draw and grab theimage
without having other programs conflict. (This kind of makes
sense because Aero basically makes a bitmap copy image of
all windows to enable the window-tab and mouse-over
functionality of Aero)

   另外提一句,getframe出问题只是在使用了三维效果的时候,如果只是绘制二维图,则直接使用getframe没问题,看来确实是三维表面渲染的问题。

  最后稍微总结一下Matlab的集中渲染方式吧,以前只知道渲染方式有Z-buffer和OpenGL,今天才知道还有个Painter's。Matlab支持三种渲染方式,其特性如下

Painter's:

使用向量图绘制figure;

一般绘制的结果分辨率较高;

当figure中只是包含简单或小的图形对象时,此方式是最快的;

当使用HPGL打印机打印或导出Adobe插图文件时,这是唯一允许的渲染方式;

产生PostScript和EPS文件最后的渲染方式;

不能渲染使用RGB颜色的patch、surface对象;

不支持光照和透明效果。

Z-buffer:

使用bitmap光栅图绘制figure;

比Painter's更快更精确;

在显示复杂的场景时会消耗很多系统内存;

支持光照,不支持透明效果。

OpenGL:

使用bitmap光栅图绘制figure;

通常比上面两者更快;

在一些系统上能控制图形渲染硬件;

支持光照和透明效果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值