⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 exportfig.m

📁 Image Processing, Analysis, and Machine Vision 3rd Edition (2007)
💻 M
📖 第 1 页 / 共 2 页
字号:
  set(H, 'PaperPositionMode', 'manual');

  % Process rendering parameters
  switch (color)
   case {'bw', 'gray'}
    if ~strcmp(color,'bw') & strncmp(format,'eps',3)
      format = [format 'c'];
    end
    args = {args{:}, ['-d' format]};

    %compute and set gray colormap
    oldcmap = get(H,'Colormap');
    newgrays = 0.30*oldcmap(:,1) + 0.59*oldcmap(:,2) + 0.11*oldcmap(:,3);
    newcmap = [newgrays newgrays newgrays];
    old = LocalPushOldData(old, H, 'Colormap', oldcmap);
    set(H, 'Colormap', newcmap);

    %compute and set ColorSpec and CData properties
    old = LocalUpdateColors(allColor, 'color', old);
    old = LocalUpdateColors(allAxes, 'xcolor', old);
    old = LocalUpdateColors(allAxes, 'ycolor', old);
    old = LocalUpdateColors(allAxes, 'zcolor', old);
    old = LocalUpdateColors(allMarker, 'MarkerEdgeColor', old);
    old = LocalUpdateColors(allMarker, 'MarkerFaceColor', old);
    old = LocalUpdateColors(allEdge, 'EdgeColor', old);
    old = LocalUpdateColors(allEdge, 'FaceColor', old);
    old = LocalUpdateColors(allCData, 'CData', old);
    
   case 'cmyk'
    if strncmp(format,'eps',3)
      format = [format 'c'];
      args = {args{:}, ['-d' format], '-cmyk'};
    else
      args = {args{:}, ['-d' format]};
    end
   otherwise
    error('Invalid Color parameter');
  end
  if (~isempty(renderer))
    args = {args{:}, ['-' renderer]};
  end
  if (~isempty(resolution)) | ~strncmp(format,'eps',3)
    if isempty(resolution)
      resolution = 0;
    end
    args = {args{:}, ['-r' int2str(resolution)]};
  end

  % Process font parameters
  if (~isempty(fontmode))
    oldfonts = LocalGetAsCell(allFont,'FontSize');
    switch (fontmode)
     case 'fixed'
      oldfontunits = LocalGetAsCell(allFont,'FontUnits');
      old = LocalPushOldData(old, allFont, {'FontUnits'}, oldfontunits);
      set(allFont,'FontUnits','points');
      if (fontsize == -1)
	set(allFont,'FontSize',7);
      else
	set(allFont,'FontSize',fontsize);
      end
     case 'scaled'
      if (fontsize == -1)
	wscale = width/figurePos(3);
	hscale = height/figurePos(4);
	scale = min(wscale, hscale);
      else
	scale = fontsize;
      end
      newfonts = LocalScale(oldfonts,scale,5);
      set(allFont,{'FontSize'},newfonts);
     otherwise
      error('Invalid FontMode parameter');
    end
    % make sure we push the size after the units
    old = LocalPushOldData(old, allFont, {'FontSize'}, oldfonts);
  end
  if strcmp(fontencoding,'adobe') & strncmp(format,'eps',3)
    args = {args{:}, '-adobecset'};
  end

  % Process linewidth parameters
  if (~isempty(linemode))
    oldlines = LocalGetAsCell(allMarker,'LineWidth');
    old = LocalPushOldData(old, allMarker, {'LineWidth'}, oldlines);
    switch (linemode)
     case 'fixed'
      if (linewidth == -1)
	set(allMarker,'LineWidth',1);
      else
	set(allMarker,'LineWidth',linewidth);
      end
     case 'scaled'
      if (linewidth == -1)
	wscale = width/figurePos(3);
	hscale = height/figurePos(4);
	scale = min(wscale, hscale);
      else
	scale = linewidth;
      end
      newlines = LocalScale(oldlines, scale, 0.5);
      set(allMarker,{'LineWidth'},newlines);
     otherwise
      error('Invalid LineMode parameter');
    end
  end

  % Export
  print(H, filename, args{:});

catch
  hadError = 1;
end

% Restore figure settings
for n=1:length(old.objs)
  set(old.objs{n}, old.prop{n}, old.values{n});
end

if hadError
  error(deblank(lasterr));
end

% Show preview if requested
if showPreview
  X = imread(filename,'png');
  delete(filename);
  f = figure( 'Name', 'Preview', ...
	      'Menubar', 'none', ...
	      'NumberTitle', 'off', ...
	      'Visible', 'off');
  image(X);
  axis image;
  ax = findobj(f, 'type', 'axes');
  set(ax, 'Units', get(H,'PaperUnits'), ...
	  'Position', [0 0 width height], ...
	  'Visible', 'off');
  set(ax, 'Units', 'pixels');
  axesPos = get(ax,'Position');
  figPos = get(f,'Position');
  rootSize = get(0,'ScreenSize');
  figPos(3:4) = axesPos(3:4);
  if figPos(1) + figPos(3) > rootSize(3)
    figPos(1) = rootSize(3) - figPos(3) - 50;
  end
  if figPos(2) + figPos(4) > rootSize(4)
    figPos(2) = rootSize(4) - figPos(4) - 50;
  end
  set(f, 'Position',figPos, ...
	 'Visible', 'on');
end

%
%  Local Functions
%

function outData = LocalPushOldData(inData, objs, prop, values)
outData.objs = {inData.objs{:}, objs};
outData.prop = {inData.prop{:}, prop};
outData.values = {inData.values{:}, values};

function cellArray = LocalGetAsCell(fig,prop);
cellArray = get(fig,prop);
if (~isempty(cellArray)) & (~iscell(cellArray))
  cellArray = {cellArray};
end

function newArray = LocalScale(inArray, scale, minValue)
n = length(inArray);
newArray = cell(n,1);
for k=1:n
  newArray{k} = max(minValue,scale*inArray{k}(1));
end

function newArray = LocalMapToGray(inArray);
n = length(inArray);
newArray = cell(n,1);
for k=1:n
  color = inArray{k};
  if (~isempty(color))
    if ischar(color)
      switch color(1)
       case 'y'
	color = [1 1 0];
       case 'm'
	color = [1 0 1];
       case 'c'
	color = [0 1 1];
       case 'r'
	color = [1 0 0];
       case 'g'
	color = [0 1 0];
       case 'b'
	color = [0 0 1];
       case 'w'
	color = [1 1 1];
       case 'k'
	color = [0 0 0];
       otherwise
	newArray{k} = color;
      end
    end
    if ~ischar(color)
      color = 0.30*color(1) + 0.59*color(2) + 0.11*color(3);
    end
  end
  if isempty(color) | ischar(color)
    newArray{k} = color;
  else
    newArray{k} = [color color color];
  end
end

function newArray = LocalMapCData(inArray);
n = length(inArray);
newArray = cell(n,1);
for k=1:n
  color = inArray{k};
  if (ndims(color) == 3) & isa(color,'double')
    gray = 0.30*color(:,:,1) + 0.59*color(:,:,2) + 0.11*color(:,:,3);
    color(:,:,1) = gray;
    color(:,:,2) = gray;
    color(:,:,3) = gray;
  end
  newArray{k} = color;
end

function outData = LocalUpdateColors(inArray, prop, inData)
value = LocalGetAsCell(inArray,prop);
outData.objs = {inData.objs{:}, inArray};
outData.prop = {inData.prop{:}, {prop}};
outData.values = {inData.values{:}, value};
if (~isempty(value))
  if strcmp(prop,'CData') 
    value = LocalMapCData(value);
  else
    value = LocalMapToGray(value);
  end
  set(inArray,{prop},value);
end

function bool = LocalIsPositiveScalar(value)
bool = isnumeric(value) & ...
       prod(size(value)) == 1 & ...
       value > 0;

function value = LocalToNum(value)
if ischar(value)
  value = str2num(value);
end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -