Windows 8.1 DPI Scaling Enhancements

Windows 8.1 DPI Scaling Enhancements

  • Comments 21
  • Likes

4K display technology is here, and if you haven’t seen a 4K display in-person prepare to be blown away! With products like the 32” Sharp PN-K321 4K Ultra-HD display now hitting the US market you can now experience this technology for yourself. These 4K displays aren’t inexpensive, but if your budget permits they offer an amazing picture for professional work or even entertainment.

Windows 8.1 tri-mon wallpaper spanning 1200
Windows 8.1 tri-mon setup from left: Samsung 23” full-HD, Samsung 27” WQHD, Sharp PN-K321 32” Ultra-HD

While high-resolution displays are amazing they also present some practical challenges. When you increase resolution you inherently decrease the size of each pixel (assuming same display size). By decreasing the size of each pixel the content shown on the display appears smaller. When display Dots-Per-Inch (DPI) gets sufficiently dense this “shrinking effect” can make content hard to see and UI targets difficult to click/tap.

Another challenge that is presented with the introduction of ultra-high resolution displays is dealing with multi-mon configurations with non-uniform DPI values. For example if you are running two 27” displays with one at full-HD and one at WQHD the content will not appear at the same scale when an app is moved from one display to the other. This is not an ideal user experience.

With the recent proliferation of high-DPI tablets, notebooks, and external displays these high-DPI and DPI scaling issues became an important consideration for Windows 8.1.

Windows 8.1 DPI scaling improvements are primarily focused on:

  • Optimizing the usability and readability of high-DPI displays
  • Providing a uniform experience multi-display systems
  • Empowering developers to optimize app-specific scaling based on display DPI

Optimizing for High-DPI in Windows 8.1

Sometimes facts and figures need some interpretation before they can be understood. If you’re comparing display DPI values between a phone, a tablet, and a desktop display you need to factor in viewing distance. As a quick exercise I calculated the “effective display DPI” values for my Nokia 920 phone and each of the displays in the tri-mon setup shown above. Here’s what I came up with when I calculated a “normalized 1-foot DPI value”:

Effective DPI at one foot

It’s interesting to note that my Nokia 920 (held at 9”) has the same effective DPI as the 32” Sharp 4K display (viewed at 22”). You can’t see the pixels in either display at these distances. On Windows 7 and Windows 8 I’ve noticed that some UI is hard to see at this effective DPI. In addition to being hard to see, it can also be challenging to interact with UI when using a mouse.

In order to address these scale/DPI issues, in Window 8.1 the maximum DPI scaling value was increased from 150% to 200%. This additional scaling capability provides two distinct advantages for high-DPI displays on Windows 8.1:

  1. UI can scale larger which makes readability better and touch/mouse interactions easier.
  2. 200% scaling enables pixel-doubling for up-scaling which provides a clear and crisp appearance for images, graphics, and text.

For comparison, here’s what you would see in Windows 8 in the Display control panel under “Appearance and Personalization”:

Windows 8 DPI scaling CPL crop

In Windows 8.1 you can see here that DPI scaling goes up to 200%:

Windows 8.1 Display CPL DPI crop

So on Window 8.1 your apps will run better on 4K and other high resolution displays. This is good news for anyone running ultra-high resolution displays on Windows. But what if you have a multi-mon setup?

Optimizing Multi-Mon DPI Scaling in Windows 8.1

If you are running a screen resolution of 1366x768 on a tablet, chances are that UI will look good at 100% DPI settings. But what about when you connect that tablet to an external high resolution display? In Windows 8 you can choose either 100% to optimize the UI on the tablet display or up to 150% to optimize the UI on the external display. You have to compromise.

Windows 8.1 takes care of this issue by supporting per-display DPI scaling. By default, Windows 8.1 will choose the optimum DPI scaling value for each display based on the value chosen for overall scaling in the control panel:

Desktop CPI Display Crop

In order to illustrate this feature, I adjusted the screen resolution for each of the three displays connected to my Windows 8.1 preview system to exaggerate DPI scaling. This resulted in the following physical display DPI values:

  • 23” display: 64 DPI
  • 27” display: 81 DPI
  • 32” display: 140 DPI (native)

To show you how UI scales with this demo configuration, here’s a side-by-side view of the Calculator app side-by-side on each display using 100% scaling in the control panel:

Windows 8.1 Calc Overlapping Displays Wide
Side-by-side overlapping monitor configuration to show relative scale of UI

Windows 8.1 Calc Uniform Scaling Demo 1200
Relative scale of calculator app with 100% scaling on all displays (close-up)

This single scaling factor yields different physical scaling of the UI as you can see in the above photo. With only one scaling factor for all displays you have to make a compromise. With the new Windows 8.1 per-display DPI scaling turned on things look different:

Windows 8.1 Calc Per-Display Scaling Demo 1200
Relative scale of calculator app with automatic per-display DPI scaling (close-up)

If we overlay screenshots of these calc.exe app instances, we can see how they are scaled differently at the pixel level:

Calc overlay demo screen resolutions

This translates to a much better user experience when you are running multiple displays with non-uniform physical DPI values. This behavior is automatic for desktop apps on Windows 8.1, but there are some cases where an app will require knowledge of DPI scaling so that app-specific scaling optimizations can be implemented. Windows 8.1 has an answer for that too!

Enabling Custom DPI-Scaling for Apps in Windows 8.1

There are a lot of things apps can do to optimize the user experience for DPI scaling. If we take a photo editing app as an example, there are some very important considerations. A photo editing app may want to scale UI elements like buttons and checkboxes, but not scale other content. If we consider the image viewing area of the app it may be critically important that that portion of the UI not be scaled. If the image viewing area of the app was automatically scaled to 200% you’d never be able to see your photo at native resolution because it would be pixel doubled. This could be a problem if the reason you bought that 4K display was to see more of your images at native resolution!

Windows 8.1 provides APIs for apps to know what the optimal scaling value is. If you were developing that photo editing app, you could scale the toolbars and chrome based on the optimal scaling value and leave the image viewing area at 100% scale. Perfect!

One example of an app that responds to DPI scaling in the Windows 8.1 Preview is IE 11. IE 11 uses the API to determine the optimal zoom level and adjusts it automatically.

Here’s a side by side view of IE 11 using the automatic zoom across the 3 displays used for this article:

Windows 8.1 IE 11 IE Auto Zoom 100 150 300 1200
IE auto-zoom at 100% zoom (left), 150% zoom (middle), 300% zoom (right)

Notice how IE fills with width of the browser when maximized on each display. If we view a screenshot of all displays we can see how differently IE is scaled at a pixel level:

IE 11 auto-zoom 100 150 300 1200
Screenshot showing IE at 100% zoom (left), 150% zoom (middle), 300% zoom (right)

If you are running a high resolution display or an extreme multi-mon setup Windows 8.1 has some great improvements to look forward to. I hope you’ll try it out!

*Update: There have been some questions about when per-display DPI scaling is used (different DPI scaling values per display) and I wanted to add a note here to clarify. On Windows 8.1 when you have the “Let me choose one scaling level for all my displays” check box checked (not checked by default) one uniform DPI scaling value is used for all displays. If you don’t have this checkbox checked (the default behavior), Windows 8.1 will determine the best DPI scaling value for each display and use separate DPI scaling values for each display when needed. See the screenshots in this article for more information.

Find me on twitter here: @GavinGear

21 Comments
You must be logged in to comment. Sign in or Join Now
  • nickb
    0 Posts

    I'm trying to add backwards compatibility to one of our old apps. I need to define a typedef to match the function signature of wm_changed. Do you have those settings should I pull them from the updated headers onced they're installed?

  • Sorry, I am still contemplating the DPI scaling in Windows 8. When running dual monitors with different resolutions the DPI scaling works pretty well moving from one monitor to the next. The problem comes in when you have different use cases for each screen as in a desktop monitor and the Surface Pro monitor. In this case, you don't want the physical elements to be the same size when you move from the Desktop to the Surface, you actually want them to be larger.

    Here is how I assume that the current DPI scaling works. Let's say you have a 1920 x 1080 monitor that is 10" tall and a 1920 by 1080 monitor that is 5" tall. To maintain the same vertical height of an object on screen, you would double the pixel count on the smaller monitor. So a close button that is 20 pixels tall on the desktop would be 40 pixels tall on the Surface. If we put them side by side as you did in your examples, they would be almost the exact same height. The problem is that this is still too small for touch on the Surface.

    Is it possible that we could add one more check box to the DPI Scaling interface. One that uses a non-linear function for scaling? One that "Optimizes for touch" on small screens? So now, when scaling dpi instead of 40 pixels tall it over scales to 60 pixels?

  • Gavin Gear - Thank you for the detailed reply. It is nice to know that MS is looking at one of the pain points of early adopters of the Surface Pro. As I read this post and the comments over and over, I think I see that the changes in 8.1 are really geared for those that use multiple monitors in a static environment. More like a desktop with three monitors attached rather than a mobile user that attaches to external monitors. On a standard laptop, the pain wouldn't be as great because the monitor on the laptop is larger and you generally are not using it as a touch first device when undocked.

    When using a Surface Pro in tablet mode it is critical to have touch elements large enough to be touched. That is why I like having it at 150% and why I assume MS ships the Surface Pro with 150% as the default.

    In 8.1, it does not appear that you can have 150% on one monitor while simultaneously having 100% on a larger external monitor. If one monitor is active, I see three scaling options on the slider. When both monitors are active, there are five scaling options available, but both monitors are set to the same scaling. If the larger monitor is primary when you login, it looks great. If the Surface monitor is primary when you login, it looks great. But the secondary monitor never looks the way it would if it was the only monitor.

    As more desktop apps support WM_DPICHANGED hopefully things will improve, but I think more work needs to be done to the core OS. At best, plugging and unplugging monitors while logged on results in either an oversized GUI on the big monitor, or an undersized GUI on the Surface Pro. At worst, you end up with a strange hybrid of icons, GUI sizes and fuzzy text.

  • elzeus
    0 Posts

    Will this dpi scaling change anything for monitors in portrait mode? I have metro running on a 1600x900 monitor (in portrait orientation 900x1600) on  the side of a dell u2711 (2560x1440) and all of the metro apps look horrible on the smaller monitor. The mail app specifically all of the side ui elements get squeezed out of the screen (other apps have so much wasted space in portrait mode as well). Also will there be a unified mailbox in windows 8.1 that is the only other complaint I had about windows 8. Thanks.

  • Awesome! Does that mean the Photoshop icons on my 1080p 10" Surface Pro arent the size of ants anymore?!

  • Gavin Gear
    104 Posts

    I wanted to follow-up on some of the questions that have been asked here regarding the DPI scaling improvements in Windows 8.1. Answers provided by the feature team!

    ---

    Q: Can you guys also fix certain Windows UI that has scaling issues?

    A: We have updated dozens of icon assets used by explorer, common controls, etc., and we’re continuing to fix some issues like this even after the preview release. The “Up Arrow” is one of the issues being fixed.

    ---

    Q: First, I have never understood why changing the scaling couldn't be as dynamic as changing the resolution. … I have to log out and log back in to get it to the proper resolution (150%). Logging in and out to use a domain joined tablet is not convenient when on the run.

    A: Scaling turns out to be a lot harder to change on the fly than resolution.  We’ve had resolution change in the ecosystem for about 20 years.  Apps that need to work with different resolutions are expected to respond to WM_DISPLAYCHANGE and a host of other events to resize themselves.  There’s no comparable event for a scaling change (WM_DPICHANGED is new in Windows 8.1), so there are only a few apps that handle this event today.  For any app that doesn’t handle this event, Windows has to do the scaling, and that means performing a bitmap scaling operation on the app’s rendered output.

    ---

    Q: … Some apps - primarily System Center consoles - look horrible at anything other than 100%. The icons look very pixelated at 125% and above.

    A: Does this mean utilities like Disk Management? MMC and all its plug-ins in 8.1 are scaled by Windows rather than scaling themselves, as there were some severe text clipping bug at 150% and 200%.  At 200% the use of pixel doubling makes for a better experience.

    ---

    Q: I am still having a lot of problems with scaling on my Surface Pro. At work I dock via DisplayPort with a Dell u2913wm (29" 2560 x 1080) monitor and leave the Surface monitor turned off. At home I have a Dell u2340st (23" 1920 x 1080) docked using it's built-in DisplayLine USB connection. On the desktop monitors, I like the scaling to be small (100%). On the surface, I like the scaling large (150%).

    Windows 8.1 does retain the settings for each, but in order for it to look right I have to log out of the computer for each transition. If I don't, display elements appear in various sizes. Sometimes the taskbar icons are very small. Sometimes the Windows logo on the start button bleeds off the screen. Sometimes the close button is huge. Sometimes I have to logout twice to get it to pick up the changes.

    A: I have seen the taskbar size/Windows logo bug (mostly when switching between different users, though). We’ll take a look at the scenario where you are docking with different desktop monitors.  In most of the cases, Windows should just switch from 150% to 100% without any change on  your part when dealing with external monitors.  

  • kent_farriers - Exactly. The need to logout and login to change DPI on a domain joined tablet really takes away from the experience. This needs to be fixed if Windows 8 is going to be considered a true OS for Hybrid devices.

  • The number one complaint for our Surface Pro users is using two monitors and the DPI scaling.  I really hope this is fixed by RTM of 8.1 as this would be a killer feature.

    e.g.

    1. No logout required to change DPI settings

    2. 150% on Surface and 100% on say 22-24inch monitor via USB 3.0 Dock and DisplayLink.

    I really don't understand why technically we can't change DPI settings on the fly without logging out of the system.  This is such a pain on Domain at work when you go to a meeting and have to close all your applications so that you can via the screen at 125% or 150% and then get back to your desk and change things all over again.

    Note:

    I have tried to test this with something other than a Surface Pro like the new Sony Vaio Pro 13 with a Haswell chip but the Intel drivers are not up to date.  What a shame we can't test this early on as well.

    Anyhow things are shaping and we all have a lot riding on this release.  I have management buy in from the top down so lets get this party started ;)

  • I hope that some effort is taken to verify that zooming > 125% doesn't break apps. I've found that pushing to 150% in windows 8 on my htpc makes many non-metro apps unusable, as the lower right and bottom of the screen (the area between 125% and 150%) don't take mouse input. maybe it's because i'm running at 720p and uprez'ing (it's a tv and 8' away), but many of my programs and games blow up. maybe 200% will fix everything... also, now i need a new tv :)

  • I am still having a lot of problems with scaling on my Surface Pro. At work I dock via DisplayPort with a Dell u2913wm (29" 2560 x 1080) monitor and leave the Surface monitor turned off. At home I have a Dell u2340st (23" 1920 x 1080) docked using it's built-in DisplayLine USB connection. On the desktop monitors, I like the scaling to be small (100%). On the surface, I like the scaling large (150%).

    Windows 8.1 does retain the settings for each, but in order for it to look right I have to log out of the computer for each transition. If I don't, display elements appear in various sizes. Sometimes the taskbar icons are very small. Sometimes the Windows logo on the start button bleeds off the screen. Sometimes the close button is huge. Sometimes I have to logout twice to get it to pick up the changes.

    First, I have never understood why changing the scaling couldn't be as dynamic as changing the resolution. Now that MS is actually throwing some effort into I don't understand why that requirement is still there. It really takes away from the portability of the Surface Pro. If I am sitting at my desk working and want to grab it and go to a meeting, everything on the screen is at 100% and virtually unusable for my old eyes. I have to log out and log back in to get it to the proper resolution (150%). Logging in and out to use a domain joined tablet is not convenient when on the run.

    I also agree with Beany that some apps - primarily System Center consoles - look horrible at anything other than 100%. The icons look very pixelated at 125% and above.

    Any chance we will see any more improvement in the seamlessness of the DPI transition before RTM?

  • Gavin Gear
    104 Posts

    FYI: If you're a developer, there's some great info on these capabilities from the related //build session: channel9.msdn.com/.../4-184

  • Beany
    0 Posts

    Can you guys also fix certain Windows UI that has scaling issues? For instance if i use a higher DPI the "Up to" arrow icon in File Explorer gets pixelated... thats pretty unacceptable and so easy to fix. Windows Media Players buttons also do not scale and theres quite a few other examples. Obviously you can't do anything about 3rd party software scaling correctly but it would be great if you can fix the actual Windows UI and bundled software scaling problems.

  • I still love the look of the desktop calculator.

  • Can we get a designer at MS to update the look of that calculator. Make it MetroSexy.

  • drmr
    0 Posts

    this will end the ugly 1080 resolutions, ... finally!

    Now make laptops that are also 15" or larger and put proper resolution instead of the ugly, cheap 1080, make screens matte and you will see how laptops are selling again.  Some of use work on laptops, not just blog and watch movies.

  • drmr
    0 Posts

    Finally, the ugly 1080 resolution is going to die soon!

  • DPI Scaling is one of my favorite features of 8.1 Preview. I posted on one of the other Windows Blogs (blogs.windows.com/.../build-talk-of-the-week-beautiful-apps-at-any-size-on-any-screen.aspx) some improvements I'd like to see in the functionality, because in the Preview it still seems rather quirky.

    That said, I absolutely love the functionality, and it's one of those features that I wish had come years ago. Thanks for everyone on the Windows team that was involved in finally making it happen! :)

  • Gavin Gear
    104 Posts

    UriNud - Yes, Windows 8.1 preview was used for the demonstrations in this article. You have two options in Windows 8.1 preview: first, (default) you can let Windows decide the DPI scaling factor for each display. The result is UI that appears to be the same size on each display. Second, if you check the "Let me choose one scaling factor for all of my displays" checkbox then you'll see the scaling factors (up to 200%) that you can choose from.

  • UriNud
    1 Posts

    Are this options available in the Preview of 8.1? If yes, how I couldn't find a place to change DPI/Magnification for each monitor.

  • wsantosf
    10 Posts

    So, does this fix remote desktop as well? As it stands, it's unusable.

  • abm
    268 Posts

    Awesome and thank you for sharing info. Would RT 8.1 support 3000x* screen resolutions to match with competitors?