【问题标题】:Automatic choice of graphics format file for print command in MatlabMatlab中打印命令的图形格式文件自动选择
【发布时间】:2011-11-20 03:32:25
【问题描述】:

我有以下代码:

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:我想通过 print 更改命令 saveas 并允许它自动选择图形格式文件。一种可能性是:

[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;

没有报错?

【问题讨论】:

  • 刚刚看到您最近问了另一个问题,其中回复是export_fig。你应该真的去拿它。
  • @JohnColby:谢谢你的评论,但是export_fig和打印命令有同样的问题(你必须分别指定每个图形格式文件)。
  • 您所要做的就是export_fig myfig.png 并将其保存为png。同样适用于 jpg、pdf 等。这不是你想要的吗?
  • @JohnColby:是的。但是,我希望能够编写export_fig fmt FileName,其中 fmt 是具有图形文件格式的元胞数组,而 FileName 是与 uiputfile 的命令输出相对应的字符串,但这不起作用(实际上 export_fig 是打印命令和它们具有相似的语法)。
  • 啊,感谢您的澄清。请参阅对我的答案的编辑。

标签: matlab


【解决方案1】:

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

编辑:

感谢 cmets 对您的问题的澄清。这仍然可以使用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]+$', '')

【讨论】:

  • 非常感谢您编辑的答案。我仍然需要将图像文件的名称作为输入的变量(即我需要 FileName,它是对应于 uiputfile 的命令输出的字符串)。您可以再次编辑您的答案吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-12
  • 2011-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-19
相关资源
最近更新 更多