How can I stop image stretching using imshow in the new App designer?

27 views (last 30 days)
I am using the new App Designer and the "imshow" function to display a greyscale image. When I resize the app the image is stretched. How can I ensure the aspect ratio of the image is maintained? Thanks, Shaun

Answers (2)

Micke Malmström
Micke Malmström on 7 Sep 2017
Have you tried variations of "axis"? Like
axis(app.UIAxes,'equal')

Chris Portal
Chris Portal on 6 Nov 2016
There are a few ways to do this, depending on the complexity of your app...
1) The simplest would be to turn off the auto resize option in App Designer. Select the UI figure in App Designer's design view, and uncheck the Resize components when app is resized option. The downside is you will lose the convenient auto resizing of your components when the app window is resized.
2) If you'd like to keep the auto resizing of your components, you could try adding the following line to your App Designer code after you display your image. Assuming the UI axes in your app has been named "UIAxes":
set(app.UIAxes, 'Units', 'Pixels')
3) If neither of the above options are acceptable, you would need to implement a SizeChangedFcn in App Designer by right clicking on the UI figure and going to callbacks. This would allow you to have full control of how every component is resized, but would require you to code up the logic manually.
Hope this helps!
  2 Comments
Shaun Ward
Shaun Ward on 7 Nov 2016
Hi Chris, Thanks for the suggestions. However: 1 - if I enlarge my app the image stays the same size and I end up with a lot of unused space 2 - Undoing change in item 1 and setting the units to pixels leaves me with my original problem. The images become stretched in the direction I expand the app. 3. I'll need to check this one! I never needed to think about resizing issues with GUIDE (using imshow) as the ratio of my image always remained true to the original file. Many thanks, Shaun
Chris Portal
Chris Portal on 19 Nov 2016
Sorry to hear Shaun. I took a quick peek at GUIDE. By default, the figure GUIDE creates is set to not allow resizing.
If you enable figure resizing though, you get the same results as option 1 above where you end up with lots of unused space. If you're seeing something different in this case, it might help to see some of your GUIDE code to see how you're calling IMSHOW, or perhaps seeing a listing of axes property/value configurations.
Hope you're able to get things working!

Sign in to comment.

Categories

Find more on Develop Apps Using App Designer in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!