荣耀6 Plus 的屏幕大小pt计算方法
使用 gomobile 检测 华为荣耀 6 Plus 的屏幕大小为: 1080*1776 px ; 162pt*266.40pt ; 每pt像素个数:6.666665个。

而实际的数据是:
主屏尺寸: 5.5英寸; 分辨率 1920*1080 像素 ; 像素密度 401ppi。
实测 1776,而不是 1920 是因为 华为荣耀 有一个可隐藏的 按钮区, 实测时按钮区是存在的,排除了按钮区的高度就是 1776 。
另外,它5.5英寸的屏幕,手机屏幕以16:9,大概长12.18,宽6.85,对角13.97厘米。 按照 1英寸 = 2.54cm = 25.4 mm = 72 pt = 6pc 来说 ,它的 pt 值应该是:
194.17pt * 345.26pt 大小,但实测 162pt*266.40pt , 这个误差到底在哪里? 就是本文要分析的内容。
dpi、ppi
这两个概念在计算机领域是相同的。
dpi (dots per inch)
打印分辨率 (每英寸所能打印的点数,即打印精度)
DPI(Dots Per Inch)是印刷行业中用来度量空间点密度用的,这个值是打印机每英寸可以喷的墨汁点数。
ppi(Pixels Per Inch)
图像分辨率 (在图像中,每英寸所包含的像素数目)
即每英寸所拥有的像素数目,屏幕像素密度。
计算机显示设备从打印机中借鉴了DPI的概念,由于计算机显示设备中的原子单位不是墨汁点而是像素,所以就创造了PPI(Pixels Per Inch),这个值是屏幕每英寸的像素数量,即像素密度(Screen density)。
如160dpi指手机水平或垂直方向上每英寸距离有160个像素点。假定设备分辨率为320*240,屏幕长2英寸宽1.5英寸,dpi=320/2=240/1.5=160
Android 对不同dpi屏幕的适配
android 屏幕的碎片化太杂,对屏幕的适配就采用了分段出来,不同 dpi 的分大类如下图:

根据这些不同的大类,用户提供不同的资源图片,系统自动去对应大类下获得相应资源。下图的最后部分是相对于 基准值160 dpi(mdpi) 的图片放大倍数。

需要注意的是: 每一种dpi对应一个dpi范围,480dpi包括400dpi~560dpi,比如:Samsung S4的dpi为441,虽然没到480,但它属于xxhdpi(480dpi)这个标准。
荣耀 6 Plus dpi 为 401 (计算方法如下),它接近480dpi,所以系统会优先为它选择xxhdpi目录下的素材。
对角线是5.5英寸,因像素相对于英寸足够小,我们可以根据勾股定理,计算出对角线上大约有2202.907像素,再用这个像素数除以5.5英寸大致得到像素密度为:400.528, 约等于401。所以此处屏幕像素密度为:401ppi。
参看: http://www.jianshu.com/p/0296fada6df3
就近取ppi值的适用于所有机型的Android设备,如下图一些之前设备的取值:

gomobile 获取屏幕大小pt值的算法
WidthPt, HeightPt geom.Pt
的值是通过首先计算 PixelsPerPt(每Pt多少个像素),然后根据像素计算具体的pt值得来的。
golang.org/x/mobile/app/darwin_amd64.go 文件中有下面代码:

PixelsPerPt 的值则是 ppi/72 算出来的。
代码在: golang.org/x/mobile/app/android.go

android 的ppi或者dpi计算代码如下,也是上面文件:

这里用 Android NDK 的方法 AConfiguration_getDensity 返回的是当前手机的屏幕 dpi 类型, 就是上面的 dpi 的大分类, 可有的值如下:

然后这里使用的 dpi 不是手机屏幕真实的 dpi, 而是根据上面大类对应的dpi。
按照这个逻辑, 上面荣耀 6 Plus 的 宽的两个值就能对应出来了:
- 1080 /(401/72) = 193.9 pt
- 1080/(480/72) = 162 pt
gomobile 是按照 480 ppi 计算的, 但是它的实际 ppi 是 401 。
iOS 系列的pt计算
计算相关代码在 golang.org/x/mobile/app/darwin_armx.go

参考:
Android 屏幕适配
http://stormzhang.com/android/2014/05/16/android-screen-adaptation/
荣耀6 Plus 的屏幕大小pt计算方法的更多相关文章
- Android针对不同的手机屏幕大小设计图片资源与编码
注:本文转载于:http://blog.csdn.net/welovesunflower/article/details/7930248 一些术语 Screen Size 屏幕尺寸: 实际的物理尺寸, ...
- 安卓手机的屏幕规格很多。app开发者在设计User Interface的时候,要怎么处理,才能适应不同屏幕大小?
在app store下载应用时经常看到:此App已针对iPhone 5 进行优化.可是Android手机屏幕规格这么多,相差这么远.难道要针对每个尺寸都进行一次优化吗?(题主非专业人士,看到2014年 ...
- js 根据屏幕大小调用不同的css文件
原因:屏幕大小不一样,网站看起来总觉得怪怪的,所以,针对不同大小的屏幕,写了不同的css,写完了,要解决的问题就是:怎么根据屏幕的大小来引用不同的CSS,下面就是解决方法了. 解决方法:首先,在hea ...
- ALT+TAB切换时小图标的添加 界面透明 屏幕大小 竖行字体 进程信息
一,ALT+TAB切换时小图标的添加 Dlg类中添加变量 protected: HICON m_hIcon; #define IDR_MAINFRAME 128 ICON IDR_MAINFRAME, ...
- 根据屏幕大小动态设置字体rem
1.根据屏幕大小动态设置字体rem var docEl = document.documentElement, //当设备的方向变化(设备横向持或纵向持)此事件被触发.绑定此事件时, //注意现在当浏 ...
- Atitit html5 Canvas 如何自适应屏幕大小
Atitit html5 Canvas 如何自适应屏幕大小 可以用JS监控屏幕大小,然后调整Canvas的大小.在代码中加入JS 1 2 3 4 5 6 7 $(window).resize ...
- 我所理解的cocos2dx自适配屏幕大小方案
这里主要有两个点: 1.屏幕大小的设置,也就是手机窗口的大小,在各个手机上面或者平板上的屏幕的大小. 这个大小的设置就是代码里面的:glview->setFrameSize(width, hig ...
- js获取屏幕大小
1.js获取屏幕大小 <html> <script> function a(){ document.write( "屏幕分辨率为:"+screen.widt ...
- Unity3d发布成exe项目后的设置(全屏自适应屏幕大小)
原地址:http://blog.sina.com.cn/s/blog_697b1b8c0101gd46.html 1. 去除启动exe项目时出现的画面窗口 File ☞ Build Settings ...
随机推荐
- AngularJS 的安全Apply
$scope.safeApply = function(fn) { var phase = this.$root.$$phase; if (phase == ‘$apply‘ || p ...
- 【性能诊断】八、并发场景的性能分析(windbg案例,连接泄露)
此前遇到一个项目反馈系统宕机问题,摘要描述如下: 系统不定期出现卡死现象,在多个模块不同功能上都出现过,未发现与特定功能相关的明显规律: 当系统出现卡死现象时,新的用户无法登陆系统: 跟踪应用服务器, ...
- java通过http调用服务
package test; import java.io.IOException; import org.apache.commons.httpclient.Cookie; import org.ap ...
- 你了解System.out.println()的真正含义吗?
在Java编程中,我们常常用 System.out.println(); 来输出字符串,也许我们都已经猜到println()是方法名,但System是什么,out又是什么呢? 其实System是jav ...
- nginx path_info问题解决
问题: 访问www.xxxx.com/index.php/api/xxxxxxxxx网址时,提示无法访问,找不到页面 解决: 第一次,是改了nginx.conf,不会报这个错误了,但还是没有用 loc ...
- Oracle视图详解
转载自:http://blog.itpub.net/29785807/viewspace-1270120/ 一. 视图的定义 视图(view),也称虚表, 不占用物理空间,这个也是相对概念,因为视图本 ...
- html简介
什么是 HTML? HTML 是用来描述网页的一种语言. HTML 指的是超文本标记语言 (Hyper Text Markup Language) HTML 不是一种编程语言,而是一种标记语言 (ma ...
- Angular学习(7)- 模板
示例: <!DOCTYPE html> <html ng-app="MyApp"> <head> <title>Study 7< ...
- C/C++ 函数压栈方式
一,不同关键字,系统压栈方式 1,如果函数func是__cdecl(VC下的默认调用方式),调用时情况如下 int main() { //参数从右到左压栈 push 4 pus ...
- iwpriv
AuthMode {OPEN,SHARED,WEPAUTO,WPAPSK,WPA2PSK,WPANONE} ::Set Authentication Mode EncrypTy ...