Matlab中自动选择图形格式文件打印命令



我有以下代码:

X = 0:pi/100:2*pi;
Y = sin(X);
fh = figure('toolbar','none','menubar','none','Units','characters');
Pan1 = uipanel(fh,'Units','normalized','Position',[0 0 0.5 1],'title',...
    'Panel1');
Pan2 = uipanel(fh,'Units','normalized','Position',[0.5 0 0.5 1],'title',...
    'Panel2');
haxes = axes('Parent',Pan2,'Units', 'normalized','Position',...
[0.125 0.1 0.75 0.75]);
hplot = plot(haxes,X,Y);
xlabel(haxes,'Time (second)');
ylabel(haxes,'Amplitude (meter)');
title(haxes,'Sine function');
FileName = uiputfile('*.bmp;*.png;*.jpg;*.tif','Save as');
ftmp = figure('Menu','none','Toolbar','none','Units','normalized',...
    'Position',[-1000 -1000 1 1]);
set(gcf,'PaperPositionMode','auto');
set(gcf,'InvertHardcopy','off');
new_axes = copyobj(haxes, ftmp);
set(new_axes,'Units','normalized','Position',[0.1 0.1 0.8 0.8]);
saveas(ftmp, FileName);
delete(ftmp);
delete(fh);

我有两个问题:

#1:我希望打印的图形的背景颜色为灰色。出于这个原因,我使用命令

set(gcf,'InvertHardcopy','off');

但是,当我将图像保存为bmp格式文件时,在打印的图像上出现上部白色条带。当使用其他格式(即png, tif和jpg)时,此条不会出现。

#2:我想通过打印改变命令保存,并允许它自动选择图形格式文件。一种可能是:

[FileName,PathName,FilterIndex] = uiputfile('*.bmp;*.png;*.jpg;*.tif','Save as');
ftmp = figure('Menu','none','Toolbar','none','Units','normalized',...
    'Position',[-1000 -1000 1 1]);
set(gcf,'PaperPositionMode','auto');
set(gcf,'InvertHardcopy','off');
new_axes = copyobj(haxes, ftmp);
set(new_axes,'Units','normalized','Position',[0.1 0.1 0.8 0.8]);
switch FilterIndex
    case 1 % graphics format file is bmp
        fmt = '-dbmp';
    case 2 % graphics format file is png
        fmt = '-dpng';
    case 4 % graphics format file is jpeg
        fmt = '-djpeg';
    otherwise % graphics format file is tiff
        fmt = '-dtiff';
end  
print(ftmp,fmt,FileName,'-r200');
delete(ftmp);
delete(fh);

我的问题的其他解决方案是什么?如何修改

print(ftmp,fmt,FileName,'-r200');

print -r200 fmt FileName;

没有得到错误吗?

这两个问题(以及许多其他问题)已经在FileExchange出色的export_fig包装器中得到了解决。我几乎只使用它。看看吧,我相信你也会喜欢的。

编辑:

感谢您在评论中对您的问题的澄清。这仍然可以用export_fig来处理。如果你的输出格式是像formats = {'png', 'jpg'}这样的单元格数组,那么你可以这样做:

eval(['export_fig myfig' reshape(char(strcat(' -', formats))', 1, [])])

这是一个简单的扩展,如果你想使用FileName变量:

eval(['export_fig ' FileName reshape(char(strcat(' -', formats))', 1, [])])

但是,在这种情况下,您可能首先想要删除用户添加的任何扩展名:

FileName = regexprep(FileName, '.[w]+$', '')

最新更新