private DisplayInformationEx(Size physicalSize, Size physicalResolution, DisplayInformationSource informationSource) { PhysicalSize = physicalSize; PhysicalDiagonal = PhysicalSize.GetHypotenuse(); PhysicalResolution = physicalResolution; AspectRatio = physicalSize.Height / physicalSize.Width; if (!(AspectRatio.IsCloseEnoughTo(physicalResolution.Height / physicalResolution.Width))) throw new ArgumentOutOfRangeException("physicalResolution", "only square pixels supported"); RawDpi = physicalResolution.Width / physicalSize.Width; AbsoluteScaleFactorBeforeNormalizing = PhysicalSize.Width / DisplayConstants.BaselineWidthInInches; RawPixelsPerViewPixel = GenerateRawPixelsPerViewPixel(); ViewResolution = new Size(PhysicalResolution.Width / RawPixelsPerViewPixel, PhysicalResolution.Height / RawPixelsPerViewPixel); ViewPixelsPerInch = RawDpi / RawPixelsPerViewPixel; // Adjust for different aspect ratio, if necessary ViewPixelsPerHostPixel = Math.Min(ViewResolution.Width / Application.Current.Host.Content.ActualWidth, ViewResolution.Height / Application.Current.Host.Content.ActualHeight); HostPixelsPerViewPixel = 1 / ViewPixelsPerHostPixel; InformationSource = informationSource; }