Giải pháp được đưa ra bởi @Jonas, mà tôi đã upvoted, thực sự tốt. Tôi xin gợi ý một số cải tiến nhỏ để nó xử lý các trường hợp khi con số này được thay đổi kích cỡ:
%# read an image and make it large
img = imread('autumn.tif');
img = repmat(img, [10 10]);
%# new figure
hFig = figure;
%# try show image at full size (suppress possible warning)
s = warning('off', 'Images:initSize:adjustingMag');
imshow(img, 'InitialMagnification',100, 'Border','tight')
warning(s);
%# handle figure resize events
hAx = gca;
set(hFig, 'ResizeFcn',{@onResize,hAx})
%# call it at least once
feval(@onResize,hFig,[],hAx);
%# enable panning tool
pan on
sau đây là chức năng thay đổi kích thước callback:
function onResize(o,e,hAx)
%# get axes limits in pixels
oldUnits = get(hAx, 'Units'); %# backup normalized units
set(hAx, 'Units','pixels')
pos = get(hAx, 'Position');
set(hAx, 'Units',oldUnits) %# restore units (so it auto-resize)
%# display the top left part of the image at magnification 100%
xlim(hAx, [0 pos(3)]+0.5)
ylim(hAx, [0 pos(4)]+0.5)
end
Bạn có thể có thể cải thiện điều này hơn nữa để khi bạn thay đổi kích thước hình, bạn không phải lúc nào cũng quay trở lại góc trên cùng bên trái, nhưng vẫn duy trì vị trí hiện tại.
bạn đã xem xét sử dụng [IMTOOL] (http://www.mathworks.com/help/toolbox/images/ref/imtool.html) chưa? – Amro
Tôi đã thử nó .. nó hoạt động .. nhưng tôi muốn 'imshow' để làm điều đó vì tiết kiệm các vấn đề bằng cách sử dụng' in' .. 'imtool' sẽ không cho phép tôi để lưu các hình –
câu hỏi tương tự: [MATLAB: hiển thị một hình ảnh ở kích thước ban đầu của nó] (http://stackoverflow.com/questions/1427602/matlab-showing-an-image-in-its-original-size) – Amro