android中px pd sp的换算
- 格式:doc
- 大小:38.00 KB
- 文档页数:2
dpi和分辨率计算公式DPI和分辨率计算公式。
在今天的数字化时代,我们经常听到关于DPI和分辨率的名词。
这两个术语在打印和图像处理领域中非常常见,但是对于普通人来说,可能并不太了解它们的具体含义。
在本文中,我们将深入探讨DPI和分辨率的概念,并介绍它们的计算公式。
DPI是“每英寸点数”的缩写,它表示打印设备每英寸可以打印的点数。
通常情况下,DPI越高,打印出的图像质量就越好。
分辨率则是指图像或屏幕上像素的数量,通常以水平像素数和垂直像素数来表示。
分辨率越高,图像就越清晰。
在实际应用中,我们经常需要将DPI和分辨率进行转换和计算。
下面我们将介绍一些常见的计算公式和例子。
1. DPI和分辨率之间的关系。
在计算DPI和分辨率之间的关系时,我们可以使用以下公式:DPI = 分辨率 / 打印尺寸。
例如,如果一张图片的分辨率为3000x2000像素,而打印尺寸为10x8英寸,那么它的DPI可以通过以下公式计算:DPI = 3000 / 10 = 300。
DPI = 2000 / 8 = 250。
所以该图片的DPI为300x250。
2. 分辨率和打印尺寸之间的关系。
另外,我们也可以通过以下公式计算分辨率和打印尺寸之间的关系:分辨率 = DPI x 打印尺寸。
例如,如果一张图片的DPI为300,而打印尺寸为10x8英寸,那么它的分辨率可以通过以下公式计算:分辨率 = 300 x 10 = 3000。
分辨率 = 300 x 8 = 2400。
所以该图片的分辨率为3000x2400像素。
3. 实际应用举例。
假设我们有一张分辨率为3000x2000像素的图片,我们想要将其打印成8x10英寸的照片,那么我们可以通过以下步骤计算所需的DPI:首先,我们可以使用公式DPI = 分辨率 / 打印尺寸来计算DPI:DPI = 3000 / 8 = 375。
DPI = 2000 / 10 = 200。
所以我们需要将该图片的DPI设置为375x200。
px、dp与sp的区别以及换算1、px 即像素,1px代表屏幕上的⼀个物理像素点。
2、dp dip:device independent pixels(设备独⽴像素),dp与dip⼀样,不同的设备有不同的显⽰效果,⼀般为了⽀持WVGA、HVGA和QVGA推荐使⽤这个,不依赖像素。
3、sp sp:scale-independent pixels(缩放独⽴像素),与缩放⽆关的抽象像素,它和dp很相似,但唯⼀的区别在于,Android系统允许⽤户⾃定义⽂字尺⼨⼤⼩(⼩,正常,⼤,超⼤等),当⽂字尺⼨是“正常”时,1sp=1dp=0.00625inch(英⼨),当⽂字尺⼨是“⼤”或“超⼤”时,1sp>1dp=0.00625inch4、dpi dpi:dots per inch(每英⼨点数,或者说每英⼨像素数⽬更易懂),由设备决定,是写死的,可以通过context.getResources().getDisplayMetrics().densityDpi获取到。
当然,也可以通过以下⽅法算出: dpi=横向分辨率/横向英⼨数=纵向分辨率/纵向英⼨数Google 规定的屏幕密度列表:ldpi (low) ~120dpimdpi (medium) ~160dpihdpi (high) ~240dpixhdpi (extra-high) ~320dpixxhdpi (extra-extra-high) ~480dpixxxhdpi (extra-extra-extra-high) ~640dpi__________________________________________________________________________________dp与pxpx=dp*(dpi/160)dp=px/(dpi/160)sp与pxpx=sp*(dpi/160)sp=px/(dpi/160)_____________________________________________________________________________获取DisplayMetrics对象⽅法:DisplayMetrics dm=new DisplayMetrics();//获得DisplayMetrics对象⽅法⼀//dm=context.getResources().getDisplayMetrics();//获得DisplayMetrics对象⽅法⼆((Activity)context).getWindowManager().getDefaultDisplay().getMetrics(dm);px转其他单位代码:(该⽅法来⾃TypedValue)public static float applyDimension(int unit, float value,DisplayMetrics metrics){switch (unit) {case COMPLEX_UNIT_PX:return value;case COMPLEX_UNIT_DIP:return value * metrics.density;case COMPLEX_UNIT_SP:return value * metrics.scaledDensity;case COMPLEX_UNIT_PT:return value * metrics.xdpi * (1.0f/72);case COMPLEX_UNIT_IN:return value * metrics.xdpi;case COMPLEX_UNIT_MM:return value * metrics.xdpi * (1.0f/25.4f);}return 0;}另外⼀种px转dp的代码:/*** 根据⼿机的分辨率从 px(像素) 的单位转成为 dp*/public static int px2dip(Context context, float pxValue) {final float scale = context.getResources().getDisplayMetrics().density;return (int) (pxValue / scale + 0.5f);}dp转px:/*** 根据⼿机的分辨率从 dp 的单位转成为 px(像素)*/public static int dip2px(Context context, float dpValue) {final float scale = context.getResources().getDisplayMetrics().density;return (int) (dpValue * scale + 0.5f);}参考⾃:。
Android的计量单位px,in,mm,pt,dp,dip,sp px :是屏幕的像素点in :英⼨mm :毫⽶pt :磅,1/72 英⼨dp :⼀个基于density的抽象单位,如果⼀个160dpi的屏幕,1dp=1pxdip :等同于dpsp :同dp相似,但还会根据⽤户的字体⼤⼩偏好来缩放。
建议使⽤sp作为⽂本的单位,其它⽤dipdip和px 的关系:QVGA: density=0.75; densityDpi=120; QVGA(240*320)HVGA: density=1.0; densityDpi=160; HVGA(320*480)VGA: density=1.0; densityDpi=160; VGA(480*640)WVGA: density=1.5; densityDpi=240; WVGA(480*800)WQVGA:density=2.0; densityDpi=120; WQVGA(240*400)densityDip值表⽰每英⼨有多少个显⽰点,与分辨率是两个概念不同densityDpi下屏幕分辨率信息,以480dip*800dip的 WVGA(density=240)为例densityDpi=120时屏幕实际分辨率为240px*400px (两个点对应⼀个分辨率)状态栏和标题栏⾼各19px或者25dip横屏是屏幕宽度400px 或者800dip,⼯作区域⾼度211px或者480dip竖屏时屏幕宽度240px或者480dip,⼯作区域⾼度381px或者775dipdensityDpi=160时屏幕实际分辨率为320px*533px (3个点对应两个分辨率)状态栏和标题栏⾼个25px或者25dip横屏是屏幕宽度533px 或者800dip,⼯作区域⾼度295px或者480dip竖屏时屏幕宽度320px或者480dip,⼯作区域⾼度508px或者775dipdensityDpi=240时屏幕实际分辨率为480px*800px (⼀个点对于⼀个分辨率)状态栏和标题栏⾼个38px或者25dip横屏是屏幕宽度800px 或者800dip,⼯作区域⾼度442px或者480dip竖屏时屏幕宽度480px或者480dip,⼯作区域⾼度762px或者775dipapk的资源包中当屏幕densityDpi=240时,使⽤hdpi 标签的资源当屏幕densityDpi=160时,使⽤mdpi标签的资源当屏幕densityDpi=120时,使⽤ldpi标签的资源不加任何标签的资源是各种分辨率情况下共⽤的布局时尽量使⽤单位dip,少使⽤pxdp与px换算公式:pixs =dips * (densityDpi/160).dips=(pixs*160)/densityDpidp与px转换的⽅法:public static int dip2px(Context context, float dipValue){ final float scale = context.getResources().getDisplayMetrics().density; return (int)(dipValue * scale +0.5f);}public static int px2dip(Context context, float pxValue){ final float scale = context.getResource().getDisplayMetrics().density; return (int)(pxValue / scale +0.5f);}VGA : 640*480QVGA : 320*240HVGA : 320*480WVGA : 800*480WQVGA : 480X272或400X240分辨率(⽔平数×垂直数)类型⽐例88×72 QQCIF 11:9128×96 SUB-QCIF 4:3128×128 知道的补上 1:1160×120 QQVGA 4:3176×144 QCIF 11:9208×176 Sub-QVGA- 13:11220×176 Sub-QVGA 5:4240×176 Sub-QVGA+ 15:11320×200 CGA 16:10320×240 QVGA 4:3352×288 CIF 11:9640×360 nHD 4:3400×240 WQVGA 5:3400×320 WQVGA 5:4480×240 WQVGA 2:1480×272 WQVGA 16:9480×320 HQVGA 3:2640×480 VGA 4:3640×350 EGA 64:35720×480 VGA+ 3:2768×576 PAL 800×480 WVGA 5:3854×480 FWVGA 16:9800×600 SVGA 4:3960×540 QHD 16:9960×640 DVGA 3:21024×600 WSVGA 128:751024×768 XGA 4:31280×768 WXGA 15:91280×800 WXGA 16:101280×960 UxGA/XVGA 4:31280×1024 SXGA 25:161400×1050 SXGA+ 4:31440×900 WXGA+ 16:101600×1024 WSXGA 25:161600×1050 WSXGA 32:211600×1200 USVGA/UXGA/UGA 4:31680×1050 WSXGA+ 16:101900×1200 UXGA 19:121920×1080 WSUVGA+(WSUGA/HDTV) 4:31920×1200 WUXGA 16:102048×1536 SUVGA(QXGA) 4:32560×1600 UWXGA 16:102560×2048 USXGA 5:43200×2400 QUXGA 4:33840×2400 WQUXGA 16:10ps:/ithomer/article/details/6688303。
Android中的长度单位详解(dp、sp、px、in、pt、mm)看到有很多人不太理解dp、sp和px的区别:现在这里介绍一下dp和sp。
dp也就是dip。
这个和sp基本类似。
如果设置表示长度、高度等属性时可以使用dp或sp。
但如果设置字体,需要使用sp。
dp是与密度无关,sp除了与密度无关外,还与scale无关。
如果屏幕密度为160,这时dp和sp和px是一样的。
1dp=1sp=1px,但如果使用px作单位,如果屏幕大小不变(假设还是3.2寸),而屏幕密度变成了320。
那么原来TextView的宽度设成160px,在密度为320的3.2寸屏幕里看要比在密度为160的3.2寸屏幕上看短了一半。
但如果设置成160dp或160sp的话。
系统会自动将width属性值设置成320px的。
也就是160*320/160。
其中320/160可称为密度比例因子。
也就是说,如果使用dp和sp,系统会根据屏幕密度的变化自动进行转换。
下面看一下其他单位的含义px:表示屏幕实际的象素。
例如,320*480的屏幕在横向有320个象素,在纵向有480个象素。
in:表示英寸,是屏幕的物理尺寸。
每英寸等于2.54厘米。
例如,形容手机屏幕大小,经常说,3.2(英)寸、3.5(英)寸、4(英)寸就是指这个单位。
这些尺寸是屏幕的对角线长度。
如果手机的屏幕是3.2英寸,表示手机的屏幕(可视区域)对角线长度是3.2*2.54=8.128厘米。
读者可以去量一量自己的手机屏幕,看和实际的尺寸是否一致。
mm:表示毫米,是屏幕的物理尺寸。
pt:表示一个点,是屏幕的物理尺寸。
大小为1英寸的1/72。
先介绍下各自的定义:px: pixel,像素,电子屏幕上组成一幅图画或照片的最基本单元pt: point,点,印刷行业常用单位,等于1/72英寸ppi: pixel per inch,每英寸像素数,该值越高,则屏幕越细腻dpi: dot per inch,每英寸多少点,该值越高,则图片越细腻dp: dip,Density-independent pixel, 是安卓开发用的长度单位,1dp表示在屏幕像素点密度为160ppi时1px长度sp: scale-independent pixel,安卓开发用的字体大小单位。
以下是换算关系:一、pt和px公式一: 1pt= (DPI / 72) px当photoshop中新建画布的分辨率为72ppi( 即 72dpi时 ), 1pt=1px; 当新建画布分辨率为72*2=144ppi时,1pt=2px二、ppi和dpidpi最初用于衡量打印物上每英寸的点数密度。
DPI值越小图片越不精细。
当DPI的概念用在计算机屏幕上时,就应称之为ppi。
同理: PPI就是计算机屏幕上每英寸可以显示的像素点的数量。
因此,在电子屏幕显示中提到的ppi和dpi 是一样的,可认为公式二:dpi=ppi三、ppi计算方法ppi是指屏幕上的像素密度,其计算方法为:公式三: ppi= 屏幕对角线上的像素点数/对角线长度= √ (屏幕横向像素点^2 +屏幕纵向像素点^2)/对角线长度以小米2s为例,该屏幕分辨率为720px*1280px,4.3英寸。
则点密度为√(720^2 +1280^2) /4.3 = 342ppi。
四、px和dpdp为安卓开发时的长度单位,根据不同的屏幕分辨率,与px有不同的对应关系。
安卓端屏幕大小各不相同,根据其像素密度,分为以下几种规格:1dp定义为屏幕密度值为160ppi时的1px,即,在mdpi时,1dp = 1px。
以mdpi为标准,这些屏幕的密度值比为:ldpi : mdpi : hdpi : xhdpi : xxhdpi = 0.75 :1 : 1.5 :2 : 3;即,在xhdpi的密度下,1dp=2px;在hdpi情况下,1dp=1.5px。
Android的layout文件中有时候可能会指定具体的单位,比如有时候为px、dip或者sp等。
他们的区别如下:1. px (pixels)像素:这个大家用得比较多,一般我们HVGA代表320x480像素。
2. dip或dp (device independent pixels)设备独立像素:这个和设备硬件有关,一般我们为了支持WVGA、HVGA和QVGA cwj推荐使用这个,不依赖像素。
在android上开发的程序将会在不同分辨率的手机上运行。
为了让程序外观不至于相差太大,所以引入了dip的概念。
比如定义一个矩形10 x 10dip. 在分辨率为160dpi 的屏上,比如G1,正好是10 x 10像素。
而在240 dpi 的屏,则是15 x 15 像素. 换算公式为 pixs = dips * (density/160). density 就是屏的分辨率3. sp (scaled pixels — best for text size)放大像素:主要处理字体的大小。
下面的不经常用到:4. in (inches)英寸5. mm (millimeters)毫米6. pt (points)点 android:numColumns="auto_fit" ,GridView的列数设置为自动android:columnWidth="90dp",每列的宽度,也就是Item的宽度android:stretchMode="columnWidth",缩放与列宽大小同步android:verticalSpacing="10dp",两行之间的边距,如:行一(NO.0~NO.2)与行二(NO.3~NO.5)间距为10dp android:horizontalSpacing="10dp",两列之间的边距。
dp这个单位可能对web开发的人比较陌生,因为一般都是使用px(像素)但是,现在在开始android应用和游戏后,基本上都转换成用dp作用为单位了,因为可以支持多种分辨率的手机.以下是这两个单位的概念:px (pixels)像素–一个像素通常被视为图像的最小的完整采样,这个用的比较多,特别是web 开发,页面基本都是使用像素作为单位的.dip或dp (device independent pixels)设备独立像素—这个和设备硬件有关,一般我们为了支持手机上多种分辨率,如WVGA、HVGA和QVGA,都会使用dip作为长度的单位在Android开发我们一般都可以不需要使用px的,但是某一些控件的属性没有直接支持dip,像下面的代码youtParams.heightyoutParams.width上面这两个属性的单位为像素,但是为了兼容多种分辨率的手机,我们需要最好使用dip,时候我们可以调用以下的代码进行转换.int heightPx= DisplayUtil.dip2px(this, 33);mTabHost.getTabWidget().getChildAt(i).getLayoutParams().height = heightPx;以上代码可以在我另一篇文章看得到.该功能是设置Tab的高度,单位是像素.以上的单位转换是为了支持多分辨率手机的.该文章的地址: [Android中TabHost的使用]/*** 根据手机的分辨率从dp 的单位转成为px(像素)*/public static int dip2px(Context context, float dpValue){final float scale = context.getResources().getDisplayMetrics().density;return(int)(dpValue * scale + 0.5f);}/*** 根据手机的分辨率从px(像素) 的单位转成为dp*/public static int px2dip(Context context, float pxValue){final float scale = context.getResources().getDisplayMetrics().density;return(int)(pxValue / scale + 0.5f);}。
比如:计算WVGA(800*480)分辨率,3.7英寸的密度DPI图1Diagonal pixel 表示对角线的像素值(=),DPI=933/3.7=2523.手机屏幕的分类3.1根据手机屏幕密度(DPI)或屏幕尺寸大小分为以下3类,如图2所示图23. 2手机屏幕分类和像素密度的对应关系如表1所示:图3从以上的屏幕尺寸分布情况上看,其实手机只要考虑3-4.5寸之间密度为1和1.5的手机4 UI设计从开发角度讲,应用程序会根据3类A ndroid手机屏幕提供3套UI布局文件,但是相应界面图标也需要提供3套,如表2所示幕尺寸小于3英寸左右的布局),layout-normal(屏幕尺寸小于4.5英寸左右),layout-large(4英寸-7英寸之间),layout-xlarge(7-10英寸之间)2)图片资源方面需要根据dpi值准备5套图片资源,drawable,drawalbe-ldpi,drawable-mdpi,drawable-hdpi,drawable-xhdpiAndroid有个自动匹配机制去选择对应的布局和图片资源分享到:∙上一篇:分享摩托罗拉milestone手机升级到Android 2.2的过程∙下一篇:基于feng streaming server 搭建Android直播测试平台查看评论7楼pc0de 2011-12-16 17:11发表[回复]不错啊,转走了呵4楼qukeqi 2011-09-26 18:49发表[回复]o访问:30745次o积分:759分o排名:第8317名o原创:33篇o转载:0篇o译文:0篇o评论:147条文章存档展开阅读排行评论排行推荐文章最新评论m675650218: 楼主,能发一下你的代码吗,研究了好久,没弄出画面来,675650218@llpp2011: 楼主能发一个已实现了seekto 功能的mmfpeg源码给我吗?我想研究一下。
我邮箱llpp_llp...llpp2011: 我不知道怎么实现seekto 功能,将msec 转成Timestamp后,找不到seekto 中的...pc0de: 谢谢分享啊qqjjttt: 博主能发源码学习下吗?或者说多点思路出来。
px、dp和sp,这些单位有什么区别?DP这个是最常⽤但也最难理解的尺⼨单位。
它与“像素密度”密切相关,所以⾸先我们解释⼀下什么是像素密度。
假设有⼀部⼿机,屏幕的物理尺⼨为1.5英⼨x2英⼨,屏幕分辨率为240x320,则我们可以计算出在这部⼿机的屏幕上,每英⼨包含的像素点的数量为240/1.5=160dpi(横向)或320/2=160dpi(纵向),160dpi就是这部⼿机的像素密度,像素密度的单位dpi是Dots Per Inch的缩写,即每英⼨像素数量。
横向和纵向的这个值都是相同的,原因是⼤部分⼿机屏幕使⽤正⽅形的像素点。
不同的⼿机/平板可能具有不同的像素密度,例如同为4⼨⼿机,有480x320分辨率的也有800x480分辨率的,前者的像素密度就⽐较低。
Android系统定义了四种像素密度:低(120dpi)、中(160dpi)、⾼(240dpi)和超⾼(320dpi),它们对应的dp到px的系数分别为0.75、1、1.5和2,这个系数乘以dp长度就是像素数。
例如界⾯上有⼀个长度为“80dp”的图⽚,那么它在240dpi的⼿机上实际显⽰为80x1.5=120px,在320dpi的⼿机上实际显⽰为80x2=160px。
如果你拿这两部⼿机放在⼀起对⽐,会发现这个图⽚的物理尺⼨“差不多”,这就是使⽤dp作为单位的效果px:即像素,1px代表屏幕上⼀个物理的像素点;px单位不被建议使⽤,因为同样100px的图⽚,在不同⼿机上显⽰的实际⼤⼩可能不同,如下图所⽰dip:Density independent pixels ,设备⽆关像素。
与dp完全相同,只是名字不同⽽已。
在早期的Android版本⾥多使⽤dip,后来为了与sp统⼀就建议使⽤dp这个名字了。
⽐如⼀个机器,屏幕4⼨,分辨率480X800,他的dpi能算么。
因为不知道边长,肯定不能分开算,4是对⾓线长度,那直接⽤勾股定理算对⾓线像素,除以4,算出来⼤概是 dpi = 233 像素/英⼨。
android中px pd sp的换算
在WVGA(800x480)下dip与px之间的视觉测算结果:
dip与px之间的换算公式:
a. 2N + 2N/2 = PX
b.(2N-1)+ 2N/2 = PX
注:偶数值dip 的1.5倍等于相对应的px值,偶数值的间距与奇数元素设置居中对齐的时候会有1px的误差,仔细看可能会不是很美观(如下图)。
A与B居中对齐时有一个值的差,C与D可以完美居中对齐。
但是这种情况发生的几率还是非常小的,只有在细扣页面的时候常见到,遇到时应急处理一下也可以解决问题,但是如果在一开始设计时就注意了的话,后面细扣也不会出现问题的,也就省去了应急处理的时间,在一定程度上可以提高效率。
在HVGA(320x480)下dip与px之间的视觉测算结果:
得出的结果是dip值等于px值。
得出,视觉设计师在WVGA(480x800)模式下设计,建议最佳间距是:12px、18px、24px、30px、36px、42px、48px,由于dip、px值在HVGA\WVGA 对应的都是偶数,各个元素能做到最严格的对齐。
sp与px
在WVGA(800x480)下sp与px之间的视觉测算结果:
sp与px之间的换算公式与dip与px的换算公式相同:
a. 2N + 2N/2 = PX
b.(2N-1)+ 2N/2 = PX
在HVGA(320x480)下sp与px之间的换算结果:
结果是sp值等于px值。
视觉设计师在WVGA(480x800)模式下设计,建议常用最佳字号是:18px、24px、30px、36px、42px,在一些需要严格对齐的位置,这几个参数的文字是不会出问题的,当然其他的字号也是可以用的,毕竟应用中不是所有的文字都需要严格的对齐。
知识普及:
sp、dip,Android默认单位,可根据不同的屏幕大小自适应,同样的字号,不同的屏幕尺寸下显示的视觉效果大小不同。
Px属于固定像素值,不会主动自适应屏幕大小,不同的屏幕尺寸下显示的视觉效果大小效果相同。