Apple设备中point,磅(pt),pixel的关系与转换,以及iPhone模拟器与真机的长度关系

  查阅了好多资料都没有发现有相关的详细介绍,包括苹果官方文档,也是草草带过。后来是在一个介绍Macbook打印字体的博客中看到的,受到启发。

  首先说明苹果设备绘图的长度单位可以认为是point,不是磅(pt)的意思。该point是一个逻辑概念,是独立于设备的。

图1.不同分辨率屏幕显示1point

  对于传统常规屏幕,1 point 映射物理屏幕1 pixel。对于Retina的高分屏,1point映射物理屏幕2 pixel。这样可以统一图形在同一种类不同型号设备上图形的大小。

  所以在开发的时候,不区分常规屏幕还是Retina屏幕,在iPhone(3.5 inch)上都是(480 ,360)在Macbook(13 inch)上都是(1280 ,800)。

  在实际渲染到屏幕上时候,会有个scale 系数将 point 映射到物理 pixel,在传统屏幕上factor是等于1,Retina屏幕上是等于2,也就是上图中为什么线宽为1 point在Retina屏幕上映射线宽为2 pixel。

  对于字体上的磅(pt)转换到苹果设备上的方法。目前还没有发现直接支持单位为磅的函数。但是可以进行转换。首先,将pt 和 px单位都统一到英尺

pt/72 = inch

pixel/dpi = inch

  这样就可以简单的进行转换了

pt * dpi / 72 = pixel

  对于传统屏幕,Macbook屏幕的dpi 是96,iPhone屏幕的dpi 是163。对于Retina屏幕,Macbook屏幕的dpi 是192,iPhone屏幕的dpi 是326。但是对于开发来说,绘制的图形依然是在以point 为单位

                                 pt * dpi / 72 * scale = point

  最后发现,这也是不区分传统屏幕还是Retina屏幕的。

  如果要保证Macbook和iPhone上的实际长度相同,肯定不能用相同的point ,需要通过上述的公式进行换算。还有一点注意的是iPhone模拟器是按照Macbook的dpi来的,而macbook的dpi时低于iPhone的,也就是说Macbook的像素点比iPhone的要大,所以iPhone模拟器要比真机要大。在模拟器上的长度会比实际来的短。

Apple设备中point,磅(pt),pixel的关系与转换,以及iPhone模拟器与真机的长度关系

时间: 2024-10-08 00:59:48

Apple设备中point,磅(pt),pixel的关系与转换,以及iPhone模拟器与真机的长度关系的相关文章

使用真机测试时,在eclipse中data文件夹打不开

我们知道,在真机测试的时候,在某个应用程序中产生的db文件存在于data/data/应用的包名/中,这是我们很可能需要去该文件夹去查看一下,但是这个文件夹很可能打不开.以下给出解决办法: 1)使用RE文件管理器把data文件夹的权限更改为可读写,问题就解决了 2)使用模拟器 使用真机测试时,在eclipse中data文件夹打不开

iOS设备中per app vpn,到底需要哪些系统要求?

坑爹的Apple网站资料和MDM厂商资料,大多数说iOS 7.x设备支持per app vpn了,但是没有说明需要哪些系统环境要求. 1. iOS 7.x 设备,当然了 2. iOS 7.x 设备需在MDM服务器上注册并接受管理(MDM服务器比如SAP Afaria(apple configurator可能也可以)可以下发专门的和per app vpn相关的MDM指令) 3.iOS 7.x 设备要安装vpn的客户端.啥?不是内置VPN支持了吗?对比起,这个per app vpn需要iOS设备上面

苹果设备中的分辨率问题

在苹果设备的应用开发过程中,我们经常会需要处理屏幕的分辨率问题,包括普通屏幕和Retain屏幕. 处理屏幕分辨率时,分为点(point)分辨率和像素(pixer)分辨率.当我们查看设备参数时,看到的一般会是像素分辨率,因为它的数值更大,看起来更高大上.接下来,我们以iPhone设备为例,来看一看如何在开发中分别处理点分辨率和像素分辨率. 首先,在Xcode中创建一个iOS下的单视图应用(Single View Application),然后,在ViewController.m文件中的viewDi

移动设备中页面缩放的设定

使用移动设备浏览网页的时候,会发现有的网页可以缩放,有的不可以.这是为什么呢? 这是因为网页的meta中有个属性控制的. <meta content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0" name="viewport"> 这个meta标签表示:强制让文档的宽度与设备的宽度保持1:1,并且文档最大的宽度比例是1.0,且不允许用户点击屏幕放大浏览

防止在iOS设备中的Safari将数字识别为电话号码

转:防止在iOS设备中的Safari将数字识别为电话号码 在测试中发现iPad上的Safari总会把长串数字识别为电话号码,文字变成蓝色,点击还会弹出菜单添加到通讯录. 别的地方倒也罢了,如果在用户名中出现数字(手机注册新浪微博的话用户名就是“手机用户xxxxxxxx”),版式会很恶心. 经过测试在a标签中的长串数字不会识别为电话,于是给出现用户名但没有链接的地方嵌套一个无动作的a标签,临时解决了这个问题. 但是这样增加了额外的标签,代码的语义性变得很差,而且对大段文字不能用这个方法. 今天无意

缺少一个Windows Mobile设备中心所需要的Windows组件 Activesync4.5安装问题

我在windows server 2008系统上安装 ActiveSync win7下载v6.1 中文安装版(64位)时, 会弹出对话框提示缺少一个Windows Mobile设备中心所需要的Windows组件的问题. 因为你的Windows server  2008系统没有开启桌面体验功能,所以会发生这个问题. 开启桌面体验功能的方法如下: 一.单击"开始"菜单→"运行"命令,输入"services.msc"并回车打开"服务"

设备中创建新相册(粘贴)

二:在手机相册(ios设备相册)中创建相册 第一步:向工程里添加AssetsLibrary 库文件 第二步:在项目中"import" 导入库(在哪用就在哪导入) ? 1 #import <AssetsLibrary/AssetsLibrary.h> 核心代码 在需要添加相册的地方调用代码 ? 1 2 3 4 5 6 //添加到相册我让它执行是异步执行的方式,如果不想用这种方式,可以不去开一个线程 dispatch_async(dispatch_get_global_queu

如何将操作系统安装在存储设备中

前段时间遇到一个比较奇怪的客户.购买了服务器和存储设备,但是没有购买本地硬盘,需要安装红帽企业版5.4操作系统.由此引发了这个问题,如何将操作系统安装到存储设备中. 客户的硬件环境如下:  服务器 HP DL380 Gen8P 1台(新增) HP DL380 G7 3台(原有) 存储 HP P2000G3 FC 1台(扩容) 光纤交换机 HP 8/24 SAN Switch 1台(新增) 因为配置了 P2000 光纤存储,服务器相应配置有HBA卡(HP 81Q 8Gb 1-port PCIe F

android设备中USB转串口demo 下载

http://files.cnblogs.com/guobaPlayer/testUSB2Serial.apk USB转串口demo程序, 无需驱动,只要手机USB是OTG类型,插上我们的模块即可使用.当前波特率是9600bps 更多USB转GPIO,按键,PWM,红外,SPI,IIC,ADC,欢迎咨询,洽谈. 杭州蓝松科技,专注于android相关软硬件项目的方案开发工作,欢迎联系:qq1852600324" 公司网站:www.lansongtech.com android设备中USB转串口d