MATLAB中printpreview无法按指定尺寸显示打印图像的问题求助
问题:Matlab打印图像无法匹配指定尺寸
我需要在Letter纸张(27.94cm×21.59cm)上打印一幅宽25.4cm、高21.2cm的图像(对应212×254的二维数组,要求每个元素占1mm空间)。使用printpreview预览时,Layout和Paper设置显示符合要求,但实际图像尺寸远未达到预期(本该占纸张约90%空间)。尝试过设置figure尺寸大于纸张、硬编码figure尺寸都无效,现有代码如下:
clear clc close all x = 27.94; y = 21.59; xmarg = (27.94 - 25.4)/2; ymarg = (21.59 - 21.2)/2; xsize = 25.4; ysize = 21.2; metaData = niftiinfo('index_image.nii'); vol = niftiread(metaData); [volProc] = preProcessBrainCANDIData(vol, metaData, true); [saggital, coronal, transverse] = size(volProc); slice = volProc(:, :, transverse / 2); sliceViewer(vol) bfig = figure; imagesc(slice) axis off; colormap(gray) clim([0, 255]); set(bfig, 'Units','centimeters', 'Position',[0 0 xsize ysize]) movegui(bfig, 'center') set(bfig, 'PaperUnits', 'centimeters'); set(bfig, 'PaperPosition',[xmarg ymarg xsize ysize]) set(bfig, 'PaperOrientation', 'landscape'); printpreview
解决方案
核心问题是仅设置figure打印参数不够,还需让图像所在的axes完全填满打印区域,同时关闭Matlab默认的图像缩放适配。按以下逻辑修改:
- 强制axes尺寸与目标打印尺寸完全匹配,消除内边距
- 关闭自动缩放,确保每个像素对应指定物理尺寸
修改后的完整代码:
clear clc close all x = 27.94; y = 21.59; xmarg = (27.94 - 25.4)/2; ymarg = (21.59 - 21.2)/2; xsize = 25.4; ysize = 21.2; metaData = niftiinfo('index_image.nii'); vol = niftiread(metaData); [volProc] = preProcessBrainCANDIData(vol, metaData, true); [saggital, coronal, transverse] = size(volProc); slice = volProc(:, :, transverse / 2); sliceViewer(vol) bfig = figure; imagesc(slice) axis off; colormap(gray) clim([0, 255]); % 关键修改:设置axes尺寸并消除内边距 ax = gca; set(ax, 'Units', 'centimeters'); set(ax, 'Position', [0 0 xsize ysize]); % 让axes填满figure打印区域 set(ax, 'LooseInset', get(ax, 'TightInset')); % 移除axes额外内边距 axis image; % 强制图像宽高比匹配数据,禁止缩放 % 锁定打印参数,避免自动调整 set(bfig, 'Units','centimeters', 'Position',[0 0 xsize ysize]) movegui(bfig, 'center') set(bfig, 'PaperUnits', 'centimeters'); set(bfig, 'PaperPosition',[xmarg ymarg xsize ysize]) set(bfig, 'PaperOrientation', 'landscape'); set(bfig, 'PaperPositionMode', 'manual'); % 禁止Matlab自动修改打印位置 printpreview
内容的提问来源于stack exchange,提问作者Bell
相关产品推荐
相关产品推荐

