目前市面上的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 /;
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, ) + Math.Pow(resolutionW / rawDpiX, ));
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屏幕尺寸和分辨率相关的概念及转换方法;有了这些基础信息,就可以获得屏幕上任意元素的实际尺寸或是逻辑尺寸了。

WP8.1:关于屏幕尺寸和分辨率的那些事儿的更多相关文章

  1. iosiPhone屏幕尺寸、分辨率及适配

    iosiPhone屏幕尺寸.分辨率及适配     1.iPhone尺寸规格 设备 iPhone 宽 Width 高 Height 对角线 Diagonal 逻辑分辨率(point) Scale Fac ...

  2. iPhone屏幕尺寸、分辨率及适配

    转:http://blog.csdn.net/phunxm/article/details/42174937 目录(?)[+]   1.iPhone尺寸规格 设备 iPhone 宽 Width 高 H ...

  3. iOS屏幕尺寸和分辨率

    iOS平台家族成员主要包括iPhone.iPod Touch和iPad,但是各类设备的分辨率各不相同,目前存在的尺寸主要有: iOS设备的尺寸多种多样,此外,屏幕的分辨率也有多种,总结如下表所示: 其 ...

  4. 【转】iPhone屏幕尺寸、分辨率及适配

    原文网址:http://blog.csdn.net/phunxm/article/details/42174937 1.iPhone尺寸规格 设备 iPhone 宽 Width 高 Height 对角 ...

  5. IOS 判断设备屏幕尺寸、分辨率

    根据屏幕尺寸和分辨率,ios现在数起来有6个版本. iOS 设备现有的分辨率如下: iPhone/iPod Touch 普通屏 320像素 x 480像素 iPhone .3G.3GS,iPod To ...

  6. iPhone手机的屏幕尺寸、分辨率及适配

    1.iPhone尺寸规格 设备 iPhone 宽 Width 高 Height 对角线 Diagonal 逻辑分辨率(point) Scale Factor 设备分辨率(pixel) PPI 3GS ...

  7. 【转载】iPhone屏幕尺寸、分辨率及适配

    iPhone屏幕尺寸.分辨率及适配 转载http://m.blog.csdn.net/article/details?id=42174937 1.iPhone尺寸规格 iPhone 整机宽度Width ...

  8. ios设备屏幕尺寸与分辨率

    iOS 设备的屏幕尺寸.分辨率及其屏幕边长比例详细情况是怎样的? 根据屏幕尺寸和分辨率,ios现在数起来有6个版本.一,3GS:二,4s为代表:三,iphone5:四,ipad2为代表:五,ipad4 ...

  9. (全解析)屏幕尺寸,分辨率,像素,PPI之间到底什么关系?

    (全解析)屏幕尺寸,分辨率,像素,PPI之间到底什么关系? 产品经理马忠信关注 22015.08.30 13:59:20字数 2,660阅读 52,661 今天我给大家来讲讲这几个咱们经常打交道的词到 ...

随机推荐

  1. jQuery MD5加密实现代码

    $(md("你想要加密的字符串")); md5插件下载地址:http://xiazai.jb51.net/201003/yuanma/jquery_md5.rar 下面是我的简单例 ...

  2. hive中order by,sort by, distribute by, cluster by作用以及用法

    1. order by     Hive中的order by跟传统的sql语言中的order by作用是一样的,会对查询的结果做一次全局排序,所以说,只有hive的sql中制定了order by所有的 ...

  3. python some install tips

    /* wooyun的小伙伴出了神器. 但是都是打包配置的.我本机又搭建了wamp,不能混合了,那就自己动手丰衣足食咯. */ python 2.7 已经安装. pip https://pip.pypa ...

  4. c 数据拼接

    char buf1[] = {0x31,0x32,0x33,0x00,0x51,0x52,0x53,0xaa,0xbb,0xcc,0x00}; int a=0xabcd6799; int b=0x88 ...

  5. afx , afxMessageBox , MessageBox

    afx开头的是全局函数,可以在任何地方使用 MessageBox是CWnd的子函数,只能在CWnd窗口类对象里面用, AfxMessageBox的函数原型 int AfxMessageBox( LPC ...

  6. HTML5基础

    一.HTML(超文本标记语言) 1>就是文本,由浏览器负责将它解析成具体的网页内容 2>由N个标签(节点.元素.标记)组成 二.常见HTML标签 1>标题标签:h1.h2.h3.h4 ...

  7. 循序渐进Python3(七) --1-- 面向对象

    Python 面向对象 什么是面向对象编程? 面向对象编程是一种程序设计范式 对现实世界建立对象模型 把程序看作不同对象的相互调用 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Py ...

  8. iframe跨域访问

    js跨域是个讨论很多的话题.iframe跨域访问也被研究的很透了. 一般分两种情况: 一. 是同主域下面,不同子域之间的跨域: 同主域,不同子域跨域,设置相同的document.domian就可以解决 ...

  9. Selenium2+python自动化11-定位一组元素find_elements

    前言 前面的几篇都是讲如何定位一个元素,有时候一个页面上有多个对象需要操作,如果一个个去定位的话,比较繁琐,这时候就可以定位一组对象. webdriver 提供了定位一组元素的方法,跟前面八种定位方式 ...

  10. Qrels supervision information以及document collection,如何划分为train、test,保证test中doc对于train来说是new document

    简单的思想:转换为最小割问题 无向图的全局最小割算法:Stoer-Wagner算法 简介见:Wiki介绍得比较好并有源代码 最小割算法:http://blog.csdn.net/markpen/art ...