zoukankan      html  css  js  c++  java
  • WP8.1:关于屏幕尺寸和分辨率的那些事儿

    目前市面上的Windows Phone设备越来越多,尺寸和分辨率也越来越多,特别是WP8.1时代的到来。做过wp开发的人都知道应用适配其实较安卓要简单太多了,其中有一个重要原因,就是微软号称所有WP设备都将以2个基准分辨率来发展,即800 : 480和853 : 480。WP8+的应用适配相对来说比较简单,主要让屏幕布局适配这两种比例足矣,想必对WVGA、WXGA和720p三种分辨率及对应的模拟器都有一定了解。

    撸主最近深陷Universal Apps的大坑,虽说API变化很大,却提供了更多有价值的信息,比如屏幕的逻辑尺寸、实际尺寸、逻辑分辨率、实际分辨率等等信息,下面我们就讨论WP8.1的屏幕尺寸和分辨率的那些事儿!

    我们先了解一下以下的概念,并将细说它们之间的关系和换算方法。

    1. Window Size

    表示窗口大小或视图大小。WP8.1和WIN8.1一样,采用窗口的概念来代表当前应用的窗体。请见Windows.UI.Xaml.Window

    我们通过Window.Bounds来获取当前窗口的大小:

    // Window Size
    var bounds = Window.Current.Bounds;
    WindowSize.Text = string.Format("H {0}  x  W {1}", bounds.Height, bounds.Width);

    2. Logical Dpi

    表示当前设备每逻辑像素所包含的像素数量。请见Windows.Graphics.Display.DisplayInformation.LogicalDpi

    // Logical Dpi
    var logicalDpi = DisplayInformation.GetForCurrentView().LogicalDpi;
    LogicalDpi.Text = logicalDpi.ToString();

    3. RawPixelsPerViewPixel

    表示每个可视像素对应的实际像素个数,这是WP8.1独有得到属性,WIN8.1使用ResolutionScale来表达。请见Windows.Graphics.Display.DisplayInformation.RawPixelsPerViewPixel

    // RawPixelsPerViewPixel
    var dpiRatio = DisplayInformation.GetForCurrentView().RawPixelsPerViewPixel;
    RawPixelsPerViewPixel.Text = dpiRatio.ToString();

    4. Scale Factor

    表示基准分辨率到实际分辨率的扩展因子,这个属性在WP8.0上为App.Current.Host.Content.ScaleFactor,我们是通过这个扩展因子来判断分辨率是WVGA、WXGA或是720p的。我们熟悉的1.0、1.6、1.5倍率因子在WP8.1上都不见了,无法直接获取,但是我们可以这样来计算,[Window.Bounds.Width] * [RawPixelsPerViewPixel] / 480,即我们通过实际的分辨率和基准分辨率来反推:

     // ScaleFactor
    var scaleFactor = bounds.Width * dpiRatio /480;
    ScaleFactor.Text = scaleFactor.ToString();

    5. Screen Resolution

    表示屏幕分辨率,即实际分辨率。通过[Window.Bounds.Width] * [RawPixelsPerViewPixel][Window.Bounds.Height] * [RawPixelsPerViewPixel] 来计算:

    // ScreenResolution
    var resolutionH = Math.Round(bounds.Height*dpiRatio);
    var resolutionW = Math.Round(bounds.Width*dpiRatio);
    ScreenResolution.Text = string.Format("{0} x {1}", resolutionH, resolutionW);

    6. Logical Resolution

    表示逻辑分辨率,即基准分辨率。通过[Screen Resolution] / [Scale Factor] 来计算:

    // LogicalResolution
    LogicalResolution.Text = string.Format("{0} x {1}", resolutionH/scaleFactor, resolutionW/scaleFactor);

    7. Raw Dpi

    表示屏幕x轴或y轴方向上每英寸的实际点数,这个值和实际的屏幕设备密不可分,分别有RawDpiX和RawDpiY两个值:

    // RawDpi
    var rawDpiX = DisplayInformation.GetForCurrentView().RawDpiX;
    var rawDpiY = DisplayInformation.GetForCurrentView().RawDpiY;
    RawDpi.Text = string.Format("RawDpiX:{0}, RawDpiY:{1}", rawDpiX, rawDpiY);

    8. Screen Size

    表示屏幕尺寸,即实际屏幕对角线的长度,单位英寸。通过上面几个数值,完全能够算出当前使用设备的屏幕尺寸。通过[Screen Resolution] / [Raw Dpi] 两个方向上的欧氏距离来计算:

    // ScreenInch
    var screenInch = Math.Sqrt(Math.Pow(resolutionH / rawDpiY, 2) + Math.Pow(resolutionW / rawDpiX, 2));
    ScreenInch.Text = string.Format("{0} inches", screenInch.ToString());

    实验结果

    撸主分别在三个模拟器上做了实验,即8.1 WVGA 4 inch 512M、8.1 720p 4.7 inch 和 8.1 1080p 5.5 inch,这三个模拟器是我们WP8.1上用得最多的模拟器。单从模拟器的标题我们就能得出一些信息:

    WVGA 4 inch:屏幕尺寸4英寸,WVGA分辨率800x480,逻辑和实际分辨率都是这个值;

    720p 4.7 inch:屏幕尺寸4.7英寸,720p分辨率1280x720,基准分辨率为853x480;

    1080p 5.5 inch:屏幕尺寸5.5英寸,1080p分辨率1920x1080,基准分辨率为853x480。

    下面分别是这三种模拟器的结果:

      

    特别注意屏幕分辨率、逻辑分辨率和屏幕尺寸,和我们预想的结果完全吻合。

    总结

    介绍了WP8.1屏幕尺寸和分辨率相关的概念及转换方法;有了这些基础信息,就可以获得屏幕上任意元素的实际尺寸或是逻辑尺寸了。

  • 相关阅读:
    自适应Simpson积分
    斜率优化
    ORM的单表增删改查
    MTV模型—urls和view
    迭代器与生成器
    s7day2学习记录
    s7day1学习记录
    AI车牌识别涉及哪些技术?它是如何改变行业的?
    技术分享:人脸识别究竟是如何完成的?
    TSINGEE青犀视频行人检测景区测试时视频流切换本地背景音乐无法播放问题优化
  • 原文地址:https://www.cnblogs.com/lyl6796910/p/4672683.html
Copyright © 2011-2022 走看看