2017-09-29 8 views
0

Comment redimensionner une image en conservant le rapport entre largeur et hauteur lorsque la figure est redimensionnée (F3/F4 doit rester constant)?Conserver les proportions Figure

f=figure(); 
F1=300;F2=300;F3=600;F4=300; 
f.Position=[F1 F2 F3 F4]; 

Merci!

+0

Voulez-vous conserver un format d'image identique à celui de la fenêtre graphique dans laquelle il est redimensionné? – gnovice

+0

Non, la fenêtre graphique elle-même. Ceci est une figure de l'interface graphique. – hello123

+0

Voulez-vous dire quand la figure est redimensionnée _dans le programme_ ou quand elle est manuellement redimensionnée par l'utilisateur? –

Répondre

1

Vous pouvez utiliser la fonction de rétroaction ci-dessous pour obtenir ce que vous voulez:

set(f,'SizeChangedFcn',@(src, callbackdata) onSizeChanged(src, F3, F4)); 

function onSizeChanged(src, F3, F4) 
    pos = src.Position; 
    scale = (pos(3)/F3 + pos(4)/F4)/2; % estimate the desired scale factor 
    % scale = min(pos(3)/F3, pos(4)/F4); % alternative 
    pos(3) = scale*F3; 
    pos(4) = scale*F4; 
    src.Position = pos; 
end 

Une alternative peut être d'utiliser pbaspect, mais cela va changer le rapport d'aspect de l'intrigue, pas la fenêtre elle-même.

+0

Merci! onSizeChanged est ce que je cherchais, mais parfois la figure entre en oscillation parce que les uicontrols ont des unités normalisées. – hello123