Android中常见的单位ppi,dp,dpi,sp,px

Android中常见的单位ppi,dp,dpi,sp,px,第1张

在android 开发过程中,我们使用的单位比较少,一般情况下在描述字体大小的时候我们通常用sp,而在设置间距的时候我们用dp,除此之外很少再用到其他单位,而且很多时候我们用着用着就习惯了,也不去探究为什么这么写,可不可以用其他单位,每个单位到底代表着什么意思,所以说,习惯真的很可怕呀。今天,我们就来一探究竟,看看这些单位背后的含义。

像素即是屏幕上显示数据的最基本的点,在PS里面也是其最根本的单位,所有的图形都是在此基础上生成的,平时我们经常讲的手机屏幕分辨率就是以像素作为单位的,比如在android中我们经常说的手机像素是1080X1920,其实它所表达的意思是在该手机上面在横向上面有1080个像素点,在纵向上有1920个像素点。

在android中用来形式字体大小的单位,正常情况下会按照手机系统设置的文本大小来显示文字,但是同时也会与系统设置的文本保持一致,比如在有些老年机上面为了更好的 *** 作手机有些人会将字体设置为较大字体,这个时候使用sp作为单位的字体也会随之变大,但是如果将字体大小的单位设置为dp,则不会随着系统字体的变化而变化。

在每次的手机厂商新品发布会上,我们都会听到关于手机的介绍,比如手机的屏幕分辨率,多大尺寸等等。而当我们知晓一个手机的屏幕分辩率和手机尺寸的时候,就可以计算出手机的物理像素密度,其计算公式为:

需要注意的是,PPI是Android手机物理像素密度,而非在Android开发过程中我们经常说到的像素密度。

屏幕密度与dpi密切相关,dpi是每英寸的点数。也就是说,密度越大,每英寸内容纳的点数就越多。

在androidutil包下有个DisplayMetrics类可以获得密度相关的信息。最重要的是densityDpi这个成员,它有如下几个常用值:

DENSITY_LOW = 120

DENSITY_MEDIUM = 160 //默认值

DENSITY_TV = 213 //TV专用

DENSITY_HIGH = 240

DENSITY_XHIGH = 320

DENSITY_400 = 400

DENSITY_XXHIGH = 480

DENSITY_XXXHIGH = 640

dpi的值主要是通过displayMetrics获取的,获取方式为:

val densityDpi = resourcesdisplayMetricsdensityDpi。

dp和dip是一样的,设备独立像素,这个和设备硬件有关,不同设备有不同的显示效果。而通常在做android项目的时候,为了适配市场上面众多的手机屏幕分辩率,我们一般都会采用dp。dp是Android基于物理设备的PPI抽象出来的一个单位。它是以160dpi的屏幕为基准定义的,在160dpi的屏幕上1dp=1px,那么由此我们就可以得出其计算公式:

换算公式:1dp = (屏幕ppi/160)px或者是px = (屏幕ppi/160)1dp。举个例子:假设ppi = 320,那么1dp = 2px。

下面我们来演练一下:

如图所示,手机的屏幕分辩率为1080X1920,尺寸为5寸,从而计算得出PPI的值为440,再通过PPI计算出1dp 约等于3px。假设现在美工给的图上面有一个a图标,距离顶部的距离为30px,那么根据最终我们的换算结果可知,我们设置为10dp就可以达到完美的显示效果。

在win10高分屏中,设置200%缩放时,我们的游戏程序(使用了cef)只显示游戏画面的四分之一。

参考资料:

什么DPI? 全称是dots per inch (DPI), 也就是每英寸的点数,在显示器上就是每英寸的像素个数,Window上一般默认是96 dpi 作为100% 的缩放比率, 但是要注意的是该值未必是真正的显示器物理值, 只是Windows里我们的一个参考标准。

下面我们思考为什么DPI设置高了之后, 我们看到的字体会变大? 因为系统字体是是以固定大小(宋体10号字,物理尺寸为(10/72)英寸)设计的, 当我们DPI设置高了之后 ,说明该字体要占有更多的像素, 在屏幕分辨率不变的前提下, 看起来也就大了。所以如果我们设置高DPI,通常也意味着我们的显示器是高分辨率, 里面的字体看起来太小了, 我们需要提高DPI来把内容放大。

那么我们的程序如何才能支持高DPI? 对于高DPI的支持, 不同 *** 作系统有不同的方案。通常来说如果我们程序支持高DPI, 意味着我们要对绘画的内容进行相应的放大, 比如字体,和控件等。当然, 如果我们用的是系统字体(比如GetStockObject(DEFAULT_GUI_FONT)), 那么这种情况下我们不用 *** 心, 因为系统会对该字体在高DPI时进行相应的放大; 如果我们是用 CreateFont 自己创建的字体, 那就要我们自己对该字体进行放大了。

XP对高DPI的支持比较差劲, 大部分情况下就是 字体 的放大, 当然我们程序也可以通过GetDeviceCaps(hDC, LOGPIXELSX)获取DPI后自己对绘画的内容进行缩放。

我们知道Vista/Win7我们可以禁止DWM(Desktop Window Manager), 该模式我们称之为Basic模式, 这种模式下的高DPI效果和XP一样。

对于DWM没有禁掉的情况, Vista/Win7/Win8 对高DPI的支持又分为2种情况:

该种方式的高DPI支持是通过DWM的缩放实现的, 具体过程是这样的, 比如我们当前系统的DPI是200%, 我们程序运行时,系统会告诉你当前DPI仍然是96(100%), 所以我们程序会仍然按照100%的方式进行绘画, 但是但是系统给我们的坐标是根据DPI缩小过后的(也就是我们对窗口调用GetWindowRect或是通过GetSystemMetrics(SM_CXSCREEN) 得到的大小会比实际大小减半 ) , 当我们画完之后, DWM再对整个窗口进行200% 放大后画到屏幕上, 这样看起来我们的程序就自动支持高DPI了。

这种方式看起来很美妙, 但是它也有缺点, 主要是经过缩放后的内容看起来会变 模糊 , 比如文字会有明显的锯齿。

既然DWM虚拟化用户效果有时不是那么好, 那么我们很多时候可能会自己支持高DPI, 如何让我们的程序禁用该效果?

事实上我们可以对每个进程对DWM虚拟化的支持进行设置和查询, 系统给我们提供了2个APi: SetProcessDPIAware 和 IsProcessDPIAware , 通过调用 SetProcessDPIAware , 我们告诉系统不要对我们的程序进行DWM虚拟化。

这里还有特殊情况也提一下: 我们在高DPI下通过窗口句柄取到的坐标信息是和目标程序是否支持DWM虚拟化相关联的, 我们对其他支持DWM虚拟化的程序窗口调用GetWindowRect, 取到的坐标也是经过DWM缩放后的坐标; 对禁用DWM虚拟化程序的窗口调用GetWindowRect, 取到的坐标则是没有经过缩放的原始坐标。

最后我们再讨论下Win81 对高DPI的支持, WIn81对高DPi以3种方式支持 Process_DPI_Awareness :

下面我们依次讨论这3种方式:

第一种 Unaware , 该种方式是告诉系统, 我的程序不支持DPI aware, 请通过DWM虚拟化帮我们实现。 该方式和上面Win7/Win8对高DPI的支持的实现基本一样,主要区别是它通过GetWindowRect取到的坐标都是经过DWM缩放后的, 无论对方窗口是不是支持DWM虚拟化。

第二种方式是System DPI aware, 该方式下告诉系统, 我的程序会在启动的显示器上自己支持DPI aware, 所以不需要对我进行DWM 虚拟化。 但是当我的程序被拖动到其他DPI不一样的显示器时, 请对我们先进行system DWM虚拟化缩放。

第三种方式是 Per Monitor DPI aware , 该方式是告诉系统, 请 永远不要对我进行DWM虚拟化 ,我会自己针对不同的Monitor的DPi缩放比率进行缩放。

再介绍下相关API:

最后,简单总结下, 从上面我们可以看到微软在不同 *** 作系统上对高DPI支持的改进线路,很多方面也体现了他们对老程序兼容性上的考虑, DWM虚拟化虽然很简单, 却丢失了用户体验。

PS, 我在我机器上测试发现,桌面程序基本上只有微软自己的程序能做到在高DPI下完美支持, 其他大部分程序(即使如Chrome)也是通过DWM虚拟化实现的高DPI支持。当然现在WPF和Window store App基本上都是内置支持高DPI的。

通过Manifest能避免调用SetProcessDpiAwareness 来设置。

dpiAware 节点即控制SetProcessDpiAwareness 的参数,使用以下值分别对应宏定义:

一般使用 True/PM 即可保持程序的大小在不同显示器上都使用原像素大小(高分屏下窗口就显得小了)。

查看鼠标当前dpi的步骤如下:

1首先点击电脑桌面左下角的开始按钮,找到并打开控制面板。

2进入此界面后,鼠标点击选择硬件和声音选项,进入硬件和声音设置页面。

3这里我们点击箭头所指的鼠标选项,进入到鼠标的设置页面。

4这里我们就可以看到鼠标当前的dpi了。这样就解决了查看鼠标当前dpi的问题了。

dpi是每英寸点数的一个缩写,它的计量单位是ppi。下面是我给大家整理的dpi是什么意思,供大家参阅!

dpi是什么意思

DPI是Dots Per Inch(每英寸所打印的点数)的缩写,是打印机、鼠标等设备分辨率的单位。这是衡量打印机打印精度的主要参数之一,一般来说,该值越大,表明打印机的打印精度越高。

dpi是指每英寸的像素,也就是扫描精度。国际上都是计算一平方英寸面积内像素的多少。dpi越小,扫描的清晰度越低,由于受网络传输速度的影响,web上使用的都是72dpi,但是冲洗照片不能使用这个参数,必须是300dpi或者更高350dpi。例如要冲洗46英寸的照片,扫描精度必须是300dpi,那么文件尺寸应该是(4300)(6300)=1200像素1800像素。

DPI的理论技术

如果一台打印机的分辨率是4800×1200dpi,那么意味着在X方向(横向)上,两个墨点最近的距离可以达到1/4800英寸;在Y方向(纵向)上,两个墨点的距离可以达到1/1200英寸。

另外,通常情况下我们认为600x600DPI以上的图像, 在普通纸上按照更高打印精度(如:4800X1200DPI)的打印是没有意义的。

例如现在HP喷墨打印机最高标称分辨率是4800×1200dpi,这意味着在纸张的X方向(横向)上,每一英寸长度上理论上可以放置4800个墨点。但是如果真的在普通介质的一英寸上放置全部的4800个墨点,会发生什么情况呢--纸张对墨水的吸收过饱和,墨水连成一片,反而使分辨率下降。所以"理论"点数,是指打印机能够达到的能力极限,但是实现起来需要依靠纸张的配合,如果采用专用纸张,便可达到更好的性能,在每个英寸上放置更多的独立墨点,如果使用纸张不能支持选定的最高分辨率,就会出现相邻的墨点交融联成一片的情况,从而影响打印效果。

所以,细心的您可能会发现,在新的HP DeskJet打印机中(例如HP DeskJet5550等),如果您不选择专用纸张,为了保证打印效果,打印机是不会按照最高分辨率打印的。

DPI的检测技术

基本技术

DPI技术,即DPI(Deep Packet Inspection)深度包检测技术是一种基于应用层的流量检测和控制技术,当IP数据包、TCP或UDP数据流通过基于DPI技术的带宽管理系统时,该系统通过深入读取IP包载荷的内容来对OSI七层协议中的应用层信息进行重组,从而得到整个应用程序的内容,然后按照系统定义的管理策略对流量进行整形 *** 作。

基于DPI技术的带宽管理解决方案与我们熟知的防病毒软件系统在某些方面比较类似,即其能识别的应用类型必须为系统已知的,以用户熟知的BT为例,其Handshake的协议特征字为“。BitTorrent Protocol”;换句话说,防病毒系统后台要有一个庞大的病毒特征数据库,基于DPI技术的带宽管理系统也要维护一个应用特征数据库,当流量经过时,通过将解包后的应用信息与后台特征数据库进行比较来确定应用类型;而当有新的应用出现时,后台的应用特征数据库也要更新才能具有对新型应用的识别和控制能力。

重要应用

深度数据包检测(DPI)是一项已经在流量管理、安全和网络分析等方面获得成功的技术,同时该技术能够对网络数据包进行内容分析,但又与header或者基于元数据的数据包检测有所不同,这两种检测通常是由交换机、防火墙和入侵检测系统/IPS设备来执行的。通常的DPI解决方案能够为不同的应用程序提供深度数据包检测。 只针对header的处理限制了能够从数据包处理过程中看到的内容,并且不能够检测基于内容的威胁或者区分使用共同通信平台的应用程序。DPI能够检测出数据包的内容及有效负载并且能够提取出内容级别的信息,如恶意软件、具体数据和应用程序类型。

随着网络运营商、互联网服务提供商(ISP)以及类似的公司越来越依赖于其网络以及网络上运行的应用程序的效率,管理带宽和控制通信的复杂性以及安全的需要变得越来越重要。DPI恰好能够提供这些要求,寻求更好的网络管理以及合规的用户企业应该把DPI作为一项重要的技术。

DPI技术首先能够将数据包组装到网络的流量中,数据处理(包括协议分类)接着可以从流量内容中提取信息,流量重组和内容提取都需要大量处理能力,尤其是在高流量的数据流中。成功的DPI技术必须能够提供基本功能,如高性能计算和对分析任务的灵活的支持。

DPI处理部门必须能够提供符合通信网络性能的可扩张性和性能,深度内容检测要求不仅仅是header检测更加多的处理。因此,DPI通常使用并行处理结构来加快计算任务。DPI技术最终能够向用户提供从网络流量中提取出的信息,实际内容处理可能与提取出的信息有很大差异,DPI技术的表现有点像一个平台,提供内容处理的实用工具,但是可以让用户决定处理哪些内容。

分离网络流量

很多服务供应商现在使用DPI来将流量分为低延时(语音)、保证延时(网络流量)、保证交付(应用流量)和尽最大努力交付的应用程序(文件共享)。使用这种分类,他们可以更好的根据关键任务流量、非关键流量来优化资源并减少网络拥挤。因为廉价的带宽,服务供应商可以增加增值服务来获得额外的收入,包括安全、高峰使用管理、内容计费和针对性的广告。这些都需要对网络流量的深度检测。

管理网络性能

拥有大型网络覆盖很多地理区域的企业在他们的内部网络间可能运行着完全不同的通信类型。除了控制成本和带宽使用外,安全一直是一个挑战,这要求对网络应用程序流量的理解。这些企业已经开始看到DPI分析带来的好处,例如,网络管理员可以使用DPI技术来控制网络性能,当网络性能较低时,限制某种应用程序流量,当性能恢复到正常时,再提升流量。

现在越来越多的网络安全功能需要有效载荷级别的知识,数据泄漏防护要求深度理解通过线路发送的实际内容。应用层防火墙负责有效载荷的内容,而不是header内容。在云计算中的安全服务提供商,如反垃圾邮件或者web过滤服务等供应商,必须获取通过多个客户通信的实时可见的内容,以便迅速获取抵御威胁和攻击的信息。这样也要求内容级别的情报。

传统上来说,这些安全功能都由特殊用途的技术所提供,这些可能包括一些DPI功能。例如,IPS就有内置的DPI。保护Web网关同样提供对web内容的DPI分析,但是每种特殊用途技术引用其特殊的目的或者不兼容的软件,都会使网络基础设施效率低下。一个数据包可能会因为多种用途而被进行多次检查。另外,这些技术并不能提供可编程的接口,这就意味着你不能够提取任意信息。

除了安全问题外,DPI对于云计算服务供应商还有着重大的影响,对于云计算供应商而言,服务订阅和用户管理是一个重大挑战。很多供应商使用自身开发的或者现成的技术来管理服务订阅,他们发现这样做既缺乏可扩展性又不能为复杂的管理任务提供足够的信息。另一方面,DPI能够提供关于用户流量、应用程序使用、内容传递和异常模式的情报信息,这些服务供应商还可以利用可编程界面来收集其他有用信息,如市场营销情报和客户档案等。

'CommandBotton一个Picture控件一个

'把picture1的AutoSize属性设为True

'用Picture里装载那张你需要的

'然后

Private Sub Command1_Click()

i = MsgBox("的分辨率为:" + Str(Picture1ScaleWidth / 15) + "X" + Str(Picture1ScaleHeight / 15))

End Sub

方法:

右击选择属性,在详细信息处可以看到图像的尺寸、宽度、dpi(分辨率)等信息。

扩展资料

DPI应用:

分离网络流量

很多服务供应商现在使用DPI来将流量分为低延时(语音)、保证延时(网络流量)、保证交付(应用流量)和尽最大努力交付的应用程序(文件共享)。

使用这种分类,他们可以更好的根据关键任务流量、非关键流量来优化资源并减少网络拥挤。因为廉价的带宽,服务供应商可以增加增值服务来获得额外的收入,包括安全、高峰使用管理、内容计费和针对性的广告。

这些都需要对网络流量的深度检测。

管理网络性能

拥有大型网络覆盖很多地理区域的企业在他们的内部网络间可能运行着完全不同的通信类型。除了控制成本和带宽使用外,安全一直是一个挑战,这要求对网络应用程序流量的理解。这些企业已经开始看到DPI分析带来的好处。

例如,网络管理员可以使用DPI技术来控制网络性能,当网络性能较低时,限制某种应用程序流量,当性能恢复到正常时,再提升流量。

现在越来越多的网络安全功能需要有效载荷级别的知识,数据泄漏防护要求深度理解通过线路发送的实际内容。应用层防火墙负责有效载荷的内容,而不是header内容。

在云计算中的安全服务提供商,如反垃圾邮件或者web过滤服务等供应商,必须获取通过多个客户通信的实时可见的内容,以便迅速获取抵御威胁和攻击的信息。这样也要求内容级别的情报。

传统上来说,这些安全功能都由特殊用途的技术所提供,这些可能包括一些DPI功能。例如,IPS就有内置的DPI。

保护Web网关同样提供对web内容的DPI分析,但是每种特殊用途技术引用其特殊的目的或者不兼容的软件,都会使网络基础设施效率低下。

一个数据包可能会因为多种用途而被进行多次检查。另外,这些技术并不能提供可编程的接口,这就意味着你不能够提取任意信息。

除了安全问题外,DPI对于云计算服务供应商还有着重大的影响,对于云计算供应商而言,服务订阅和用户管理是一个重大挑战。

很多供应商使用自身开发的或者现成的技术来管理服务订阅,他们发现这样做既缺乏可扩展性又不能为复杂的管理任务提供足够的信息。

另一方面,DPI能够提供关于用户流量、应用程序使用、内容传递和异常模式的情报信息,这些服务供应商还可以利用可编程界面来收集其他有用信息,如市场营销情报和客户档案等。

以上就是关于Android中常见的单位ppi,dp,dpi,sp,px全部的内容,包括:Android中常见的单位ppi,dp,dpi,sp,px、Dpi缩放问题、怎么查看鼠标当前dpi等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/9547647.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存