Author Topic: Display resolution issue  (Read 243 times)

Offline JoeH

  • Single posting newcomer
  • *
  • Posts: 9
Display resolution issue
« on: Yesterday at 03:07:10 pm »
   I am experiencing a difficulty with retrieving the dpi display value.  I want my program to draw to the display at actual size.  As an example, I want to draw a circle with a 3 inch diameter to the screen and when the display is measured with a ruler, the circle measures 3 inches in diameter.  I want to accomplish this without the user having to input any scaling information and regardless of the display resolution the user has implemented on his computer.

   Here are the details of my installation from the CodeBlocks Help/About display:

Name               : Code::Blocks
Version                     : 25.03-r13644
SDK Version            : 2.25.0
Scintilla Version                 : 3.7.5
Author               : The Code::Blocks Team
E-mail               : info@codeblocks.org
Website                    : https://www.codeblocks.org
OS                       : Windows ll (build 26100), 64-bit edition
Scaling factor            : 1.000000
Detected scaling factor      : 1.000000
Display PPI            : 96x96
Display count            : 1
Display 0 (\\.\DISPLAY1)      : XY=[0,0]; Size=[1920,1080]; Primary

wxWidgets Library (wxMSW port)
Version 3.2.7 (Unicode: wchar_t, debug level: 1),
compiled at Mar 25 2025 17:16:27

Runtime version of toolkit used is 10.0.26100.

I am using a HP laptop that has a display that is 15 inches wide and 8.5 inches high.  My calculator tells me that the PPI for 1920x1080 is 127 (close enough) in each direction.  As you can see above, the reported Display PPI is 96x96.  These are the values I get within my program as well.

   If I manually enter the 127 ppi into my program I get the display results I desire (actual size).  Is there a mechanism to get the actual ppi from a system call?

   Thanks for your help.

Joe

Offline Miguel Gimenez

  • Developer
  • Lives here!
  • *****
  • Posts: 1830
Re: Display resolution issue
« Reply #1 on: Yesterday at 06:28:55 pm »
Windows 11 on laptops with a native resolution of 1920x1080 usually sets a 125 % scaling factor, so the PPI in logical pixels (DIP) may be 127/125 ~ 100. This scaling factor should appear in the About dialog, though.

One way to check your manifest (referring to your post on wxForums) is using Resource Hacker. This is part of the manifest from C::B

Code
<asmv3:application xmlns="urn:schemas-microsoft-com:asm.v1">
    <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
      <dpiAware>True</dpiAware>
    </asmv3:windowsSettings>
</asmv3:application>

You can try using FromDIP() and ToDIP() from wxWindow.

EDIT: Strangely, your Windows version appears as "Windows II" (Windows 2 in roman numerals), not "Windows 11"; Did you edit the installation details?.
« Last Edit: Yesterday at 06:32:30 pm by Miguel Gimenez »

Offline ollydbg

  • Developer
  • Lives here!
  • *****
  • Posts: 6177
  • OpenCV and Robotics
    • Chinese OpenCV forum moderator
Re: Display resolution issue
« Reply #2 on: Today at 01:59:10 am »
Maybe, the OP used some image shot and OCR software?  :)
If some piece of memory should be reused, turn them to variables (or const variables).
If some piece of operations should be reused, turn them to functions.
If they happened together, then turn them to classes.