像素(Pixel)对于WEB开发者来说很是熟悉,在PC互联网时代没少与其打交道。进入移动互联网之后,随着移动设备屏幕的解析度越来越高,衍生了一些关于屏幕和像素的一些新概念,比如DPI,DP,PT,Retina,4K等等,本文对这些概念做一个简单的介绍。

DPI与PPI

DPI(Dots Per Inch)是印刷行业中用来度量空间点密度用的,这个值是打印机每英寸可以喷的墨汁点数。计算机显示设备从打印机中借鉴了DPI的概念,由于计算机显示设 备中的原子单位不是墨汁点而是像素,所以就创造了PPI(Pixels Per Inch),这个值是屏幕每英寸的像素数量,即像素密度(Screen density)。由于各种原因,目前PPI(主要是iOS)和DPI(比如在Android中)都会用在计算机显示设备的参数描述中,不过二者的意思是一样的,都是代表像素密度。

高PPI屏幕显示的元素会比较精细(看起来会比较小),低PPI屏幕显示的元素相对来说就比粗糙(看起来会比较大),我们通过一幅图来看看在不同PPI下元素显示的区别:

HD与4K

现在移动设备、智能电视宣传最多的两个关键词估计就是HD、4K,这二者都是用来描述显示设备分辨率的标准,到底二者之间有什么区别?

HD(High-Definition)的分辨率要高于1280x720px或者720p。

Full HD的分辨率要高于1920x1080px,目前是主流电视以及高端手机(比如Galaxy SIV, HTC one, Sony Xperia Z, Nexus5等)采用的是这个分辨率。

4K(也叫做Quad HD或者Ultra HD)的分辨率从3840x2160起步,主要是现在高端电视的分辨率;其还有一个更高的4096x2160的标准,主要用于电影放映机或者专业相机。

Retina

Retina display即视网膜屏幕,是苹果发布iPhone 4时候提出的,之所以叫做视网膜屏幕,是因为屏幕的PPI太高,人的视网膜无法分辨出屏幕上的像素点。iPhone 4/S的PPI为326,是iPhone 3G/S的两倍,如下图:

由于屏幕在宽和高的像素数量提高了整整一倍,所以之前非Retina屏幕上的一个像素渲染的内容在Retina屏幕上会用4个像素去渲染:1x1px(non Retina) = 2x2px(Retina),这样元素的内容就会变得精细,比如:

注意,Retina display是苹果注册的命名方式,其他厂商只能使用HI-DPI或者其他的命名方式,不过意思都是一样的,就是屏幕的PPI非常高。

DP/PT/SP

随 着移动设备屏幕PPI的不断提高,对于开发者来说以前用物理像素(Physical Pixel)来度量显示元素的方法已经不奏效了。为了解决这个问题,两大平台都提出了抽象像素的概念:iOS叫做PT(Point,显示 点),Android中叫做DP/DiP(Device independent Pixel,设备无关像素),如果没有特殊说明,以下统一用DP来进行描述。

举个例子,44x44dp的元素在非Retina屏幕中等于44x44px,在Retina屏幕中等于88x88px(变为4倍)。

SP(Scale-independent pixel)是缩放无关的像素,与DP和PT一样都是抽象像素,只不过用于描述字体的大小。

iOS中处理PPI

iOS中处理不同PPI显示的方法很简单:首先规定在多高的PPI下1DP等于1px,并以这个PPI作为基准(1x multiplier),如果显示设备的PPI是基准PPI的2倍,那么1DP等于2px(2x multiplier),其实就是简单的小学乘法。

在iPhone系列中,3G/S为1x multiplier,其他为2x multiplier:

在iPad系列中,iPad 1代和2代为1x multiplier,其他为2x multiplier:

在iPad Mini系列中,iPad Mini一代为1x multiplier,其他为2x multiplier:

在iOS中,同一个应用在非Retina屏幕和Retina屏幕显示的资源是不同的,其规则是: name.png为非Retina资源,name@2x.png为Retina资源,所以对于设计人员来说,在你设计的时候需要考虑到Retina屏幕和非Retina屏幕,看下面这个例子:

Android中处理PPI

由于Android系统是开放的系统,要适配的PPI非常多,所以它对PPI划分的非常细:

  • ldpi (low) ~120dpi
  • mdpi (medium) ~160dpi
  • hdpi (high) ~240dpi
  • xhdpi (extra-high) ~320dpi
  • xxhdpi (extra-extra-high) ~480dpi
  • xxxhdpi (extra-extra-extra-high) ~640dpi

你需要把对应dpi的资源放到对应的目录就可以了,Android会根据dpi自动选择资源,目录规则如下:

  • drawable-mdpi/asset.png
  • drawable-hdpi/asset.png
  • drawable-xhdpi/asset.png
  • ...

可以看出Android中mdpi与iOS中的1x multiplier所代表的PPI是一样的,xhdpi与iOS的2x multiplier所代表的PPI一样,如图:

参考

  • http://sebastien-gabriel.com/designers-guide-to-dpi/home
  • http://developer.android.com/guide/practices/screens_support.html

(完)

原文:http://weizhifeng.net/you-should-know-about-dpi.html

本文转自:移动开发需要知道的像素知识『多图』

移动开发需要知道的像素知识『多图』相关推荐

  1. 成都链安重磅出品 | 基于VS Code插件的智能合约自动形式化验证工具Beosin—VaaS『离线免费版』...

    11月4日,成都链安重磅推出『离线免费版』智能合约自动形式化验证工具Beosin-VaaS,该版本基于流行的开发工具VS Code插件,供广大开发者免费使用.获得方式如下,欢迎体验使用: https: ...

  2. 『数据中心』供配电与空调设计基础知识

    数据中心机房的建设不是一件简单的事,数据中心的建设是一个整体结构,任何一个细节规划忽略都有可能导致问题的发生,并陷入细枝末节的问题中,最终导致其设计和建设的结果往往会很不理想,造成工期延误而需要返工, ...

  3. BigData:大数据开发的简介、核心知识(linux基础+Java/Python编程语言+Hadoop{HDFS、HBase、Hive}+Docker)、经典场景应用之详细攻略

    BigData:大数据开发的简介.核心知识(linux基础+Java/Python编程语言+Hadoop{HDFS.HBase.Hive}+Docker).经典场景应用之详细攻略 BigData:大数 ...

  4. 『高级篇』docker之开发课程EdgeService(16)

    原创文章,欢迎转载.转载请注明:转载自IT人故事会,谢谢! 原文链接地址:『高级篇』docker之开发课程EdgeService(16) 课程的edgeService依赖于课程服务的dubbo服务,对 ...

  5. 《『若水新闻』客户端开发教程》——01.课程介绍

    内容介绍 2011年,若水工作室制作了<Android开发从零开始>系列课程,感谢大家的鼓励和支持.为了进一步提高Android开发培训水平,2012年若水工作室又倾心制作的项目实战视频『 ...

  6. 『高级篇』docker之开发用户服务EdgeService(13)

    原创文章,欢迎转载.转载请注明:转载自IT人故事会,谢谢! 原文链接地址:『高级篇』docker之开发用户服务EdgeService(13) 上一节开发了用户服务,即将开发的是用户服务EdgeServ ...

  7. 戏说前端 JavaScript 之『防抖节流』基础知识

    往事不堪回首 犹记在很久之前的某次面试中,和那技术大哥谈的正欢呢,冷不防他来了句:谈一谈防抖和节流吧. 抹了把凉汗,我用颤抖的.不自信的语气回答道:呃,防抖就是应该是防止抖动的意思,节流大概是节省流量 ...

  8. PHP7+MySql开发的视频点播程序,知识付费系统

    PHP7+MySql 开发的视频点播程序,知识付费系统,ThinkPhp5.0+Vue开发的全开源知识付费系统.功能包含直播课堂.付费视频.付费音频.直播课程等.能够快速积学员.学员数据分析.智能转化 ...

  9. 用MUI花两天时间快速开发『One·一个』App,兼容Android、iOS双平台 1

    『One·一个』App 线上开源地址 App下载地址 MUI在线文档 以下所有 API 均由产品公司自身提供,本人皆从网络获取.获取与共享之行为或有侵犯产品权益的嫌疑.若被告知需停止共享与使用,本人会 ...

最新文章

  1. msvc2013编译qt5.6源码
  2. ASP.NET MVC: EF 没有创建数据库表
  3. 安装解压版本的MySQL,安装过程中的常见命令,检查windows系统错误日志的方式来检查MySQL启动错误,关于Fatal error: Can't open and lock privilege
  4. 十四、MySQL函数相关知识总结(简单易懂)
  5. 还在买白酒?算法工程师们,量化投资了解一下
  6. jQuery 引用地址{包括jquery和google提供的地址}, 节省你不必要的流量
  7. 旗舰杀手!红米旗舰定名 干翻全场?
  8. 一位腾讯离职创业 6 年 CEO 的忠告:不要等公司倒闭,才思考这 3 个问题
  9. 卡巴斯基2009注册机[纯绿色版本]
  10. mysql排列组合实现_排列组合的实现
  11. HATETRIS:故意跟你作对的俄罗斯方块游戏
  12. 从数据备份恢复来看,iCloud和iTunes到底有什么区别?
  13. 数学向量 java,数学向量和旋转(Topdown java game dev – physics problem)
  14. 【Matlab】一、解常微分方程ODE
  15. 股票-集合竟价与连续竟价
  16. VUE计算属性如何带参数
  17. 网络安全学习--DNS部署与安全
  18. 在Ubuntu Linux 15.04安装Web云桌面eyeOS
  19. 对使用misa得到叶绿体基因组SSR的结果进行注释
  20. Android计步器小Demo

热门文章

  1. 数学 —— 其他 —— 快速求逆平方根
  2. 城市公交网建设问题(信息学奥赛一本通-T1348)
  3. Bone Collector(HDU-2602)
  4. 验证子串(信息学奥赛一本通-T1140)
  5. linux那些事之zero page
  6. An attempt has been made to start a new process before the current process
  7. PHP 在服务端的应用概述
  8. jQuery UI基础 学习笔记
  9. [C++] 在连续统上的重复性质:滑动窗口
  10. 部分Caffe 报错解决方案