非常感谢图片链接!
我已经尝试过您的代码(适用于您提供的“Singapore.tif”文件和适当的输出文件),它在我的系统(Matlab 2013b,Linux 64 位)上按预期工作。这是输出文件:
所以很抱歉,您的代码没有任何问题,这可能与 Windows 上的“png”驱动程序或您的特定安装有关。您是否尝试过打印到其他驱动程序? (例如 jpg 或 pdf?)。如果您从图形的图形菜单中执行此操作,它是否真的有效,即File->Save As;或通过具有适当属性的File->Export Setup->Export?
我能想到的唯一可能使您的系统感到困惑的另一件事是尝试打印 uint8 rgb 图像(您的新加坡图像)
和叠加的双灰度图像。您可以通过以下更改来查看将您的新加坡图像转换为双精度图像是否可以解决此问题:
geoshow(Singapore(:,:,1:3), R)
到
geoshow(mat2gray(Singapore(:,:,1:3)), R)
可能还值得尝试
手动绘制数据并查看打印是否有效,例如:
[Singapore, R] = geotiffread('Singapore.tif');
SingaporeXYImage = cat(3, flipud(Singapore(:,:,1)), ...
flipud(Singapore(:,:,2)), ...
flipud(Singapore(:,:,3)));
s = size(Singapore);
matrix3D = repmat( rand(s(1),s(2)), [1,1,3]);
imagesc(R.LongitudeLimits, R.LatitudeLimits, mat2gray(SingaporeXYImage));
hold on;
imagesc(R.LongitudeLimits, R.LatitudeLimits, matrix3D, 'alphadata', .2);
hold off;
axis xy equal tight;
xlim([103.605,104.04])
ylim([1.2,1.475])
print(gcf, '-dpng', 'test.png');
作为奖励,如果您感兴趣,您可以在 Octave 中执行相同的操作(我发现 Octave 的打印图看起来更好,尤其是在字体方面!):
pkg load mapping;
pkg load image;
[SingaporeStruct, R] = rasterread('Singapore.tif');
SingaporeImage = cat(3, SingaporeStruct(1:3).data); % note this is a matrix of
% "doubles" in range [0,255]
SingaporeImage = mat2gray(SingaporeImage); % Convert to appropriate [0,1] range
% for "doubles" rgb images!
s = size (SingaporeImage);
matrix3D = repmat (rand (s(1), s(2)), [1, 1, 3]);
imagesc (R.bbox(:,1), R.bbox(:,2), ...
SingaporeImage .* 0.8 + matrix3D .* 0.2); % manually create
% transparency effect
axis xy equal tight
xlim([103.605,104.04])
ylim([1.2,1.475])
print (gcf, '-dpng', 'test.png');
此外,不要不尊重我的同事和他/她在他/她的答案中付出的努力,但我会注意到您收到的另一个答案基本上是完全错误的,无论他/她的主张和警告如何,您都应该撤回您的
marked accepted关于撤回标记答案是多么粗鲁。
mapshow 专门用于使用
MapCellsReference 格式的图像:
boston.tif 图像就是这样一种图像。
您的图像使用
GeographicCellsReference 格式。
mapshow用于前者,
geoshow用于后者;
geoshow 对于
boston.tif 会失败,就像
mapshow 对于
Singapore.tif 失败一样。应该很明显,您的图像是“地理”变体,因为您的行
geoshow(Singapore(:,:,1:3), R) 可以正常工作而不会引发错误。因此,使用
mapshow 的建议不是您问题的正确答案,并且具有误导性。更不用说它与您关于为什么
print 命令不会从其图形句柄产生预期结果的实际问题完全无关,这在理论上应该与首先如何产生图形无关。我会毫不犹豫地收回你的“接受”标记。尤其是因为该站点可作为许多其他查看者的参考;仅仅因为你被欺负接受它就将用户引导到错误的答案是没有意义的。