3 Matlab问题
1 - 有没有人知道是否有相当的
#pragma GCC poison variable_name
在matlab中,即如果它在代码中发现从此时开始使用variable_name,它会导致matlab错误吗?
另外两个不太相关的问题,因为我仍然无法相信。
2 - 无论如何都要链接像
这样的命令imagesc(I1_avg_crop, [bg_value multiplier2*std_value+bg_value]);
除了做之外,特别是一个数字
set(0,'CurrentFigure',fig3);
imagesc(I1_avg_crop, [bg_value multiplier2*std_value+bg_value]);
紧接着它?
3 - getframe()(或类似的)实际上可以在图中找到什么而不是“做一个屏幕截图”?,因为它在图形窗口移动时效果不好?
(我正在编辑某些人的代码,我是matlab的新手,所以如果这些是愚蠢的问题我会提前道歉,它只是我找不到我想要的文件)
编辑:额外问题 手册说
set(0,'CurrentFigure',h);
使数字h为当前值,但不会相对于其他数字更改其可见性或堆叠。这仍然适用于Mac OS X,因为它似乎仍然迫使它在顶部?
答案 0 :(得分:8)
(1)不,不可能“本地”毒害变量。但是,您可以执行以下解决方法:定义如下类:
classdef poison
properties (SetAccess=private)
varName
end
methods
function obj = poison(varName)
obj.varName = varName;
end
function delete(obj)
error('attempting to overwrite ''%s''',obj.varName)
end
end
end
然后你可以调用variable_name = poison('variable_name')
并获得相同的效果 - 如果variable_name
被覆盖,它会触发对象的delete方法并抛出错误,如果有索引尝试或算术操作,有一般错误。
(2)您可以在函数调用中显式设置图像的父级(传递轴句柄,您可以通过axHandle = axes('Parent',fig3);
获取),这样可以避免调用图形。但是,您无法执行和设置色彩映射缩放。因此,您必须使用
imshow(I1_avg_crop,[bg_value multiplier2*std_value+bg_value],'Parent',axHandle);
或者,如果您无法访问图像处理工具箱,则需要使用image
image(I1_avg_crop, 'CDataMapping','scaled','Parent',axHandle);
set(axHandle,'clim',[bg_value multiplier2*std_value+bg_value])
(3)如果使用轴手柄调用getframe
,它应该能够捕获轴的内容 - 除非您将图形移动到第二个屏幕上,在这种情况下它将无法工作。顺便说一句:我注意到getframe
过去曾在OSX上遇到过问题,例如:与停靠的数字。
(4)Matlab有时会出现OSX特有的问题,因为它们仍在调试一些非常基本的东西(OSX版本曾经是在X-Windows上运行的Linux版本,而且它们已经被努力改变过去几年的情况)。
答案 1 :(得分:0)
Point(3& 4)是因为我使用getframe来获取图像,这迫使窗口被带到frount,所以它可以做一个截图。我现在已经找到了一个使用http://www.mathworks.com/help/techdoc/ref/avifile.addframe.html的解决方案,它远远优于getframe,因为它可以采用“数字或轴手柄h”。
fig4 = figure('Position',[450 300 400 round(400*aspect_ratio)],'Name','fig4'); % figure 4
aviobj = avifile(movie_name,'compression','None');
for i = 1:N
aviobj = addframe(aviobj,fig4);
end
aviobj = close(aviobj);
关闭它很重要,否则它不会保存图像。显然也没有屏幕保护程序问题。