Автоматический выбор файла графического формата для команды печати в Matlab - PullRequest
1 голос
/ 19 ноября 2011

У меня есть следующий код:

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: я хочу изменить команду 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;

без получения ошибки?

1 Ответ

2 голосов
/ 19 ноября 2011

Обе эти проблемы (и многие другие) уже решены в превосходной оболочке export_fig от FileExchange.Я использую это почти исключительно.Проверьте это, и я уверен, что вам это тоже понравится.

РЕДАКТИРОВАТЬ:

Спасибо за разъяснения в комментариях к вашему вопросу.Это все еще можно обработать с помощью 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]+$', '')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...