如何将ppi转换为Android图像的dpi?

我已经开始使用Adobe Photoshop为我的Android应用程序制作graphics。 但是我无法继续下去,因为Photoshop中的分辨率是以每英寸像素为单位设置的,正如谷歌的官方文档中所说的那样,Android会要求以dpi为单位设置图像。 我已经在networking上search了两者之间的转换,但从来没有结束任何适当的公式。

我知道Android文档将关系描述为px = dp*dpi/160 。 但我的问题是,如果我知道dpi在哪里可以得到在这个计算中使用的dp值? 还是有任何关于dp的价值的假设? 我很困惑。

Dp是密度独立像素,用于推广屏幕像素的数量。 这些是来自http://developer.android.com/guide/practices/screens_support.html的一般数字;

  • xlarge屏幕至less960dp x 720dp
  • 大屏幕至less640dp x 480dp
  • 正常屏幕至less为470dp x 320dp
  • 小屏幕至less426dp x 320dp

屏幕的广义Dpi值:

  • ldpi低密度(ldpi)屏幕资源(〜120dpi)
  • mdpi中等密度(mdpi)屏幕资源(〜160dpi)。 (这是基准密度。)
  • hdpi高密度(hdpi)屏幕资源(〜240dpi)。
  • xhdpi超高密度(xhdpi)屏幕资源(〜320dpi)。

因此,您的资源的广义大小(假设他们是全屏):

  • LDPI
    • 垂直= 426 * 120/160 = 319.5px
    • 水平= 320 * 120/160 = 240px
  • MDPI
    • 垂直= 470 * 160/160 = 470px
    • 水平= 320 * 160/160 = 320px
  • 华电国际
    • 垂直= 640 * 240/160 = 960px
    • 水平= 480 * 240/160 = 720px

编辑 – 添加xhdpi,因为它们变得越来越stream行

  • xhdpi
    • 垂直= 960 * 320/160 = 1920px
    • 水平= 720 * 320/160 = 1440px

这些值应该适用于大多数xhdpi屏幕,例如电视和Nexus 4,包括Nexus 10(假设他们没有为此创build一个新的类别,因为它是25k x 16k,不知道我没有得到手上一个呢)。

/编辑


如果你使用这些尺寸,你的图片在任何屏幕上都会看起来很棒。 一定要在dp代码中定义大小,但Android会自行处理上述转换。

我不同意Michael Allen的回答,因为ldpi,mdpi,hdpi和xdpi的分辨率并不满足google替代文件中提到的替代位图的3:4:6:8缩放比例,这里的'Alternative Drawables'

http://developer.android.com/guide/practices/screens_support.html#testing

因此,我build议您采取最小尺寸的基准示例

470 x 320 dp现在使用公式从相同的文件,我们计算全屏分辨率的基准屏幕尺寸

px = dp *(dpi / 160); 对于基线px = dp *(160/160)= dp * 1因此px = dp。 这意味着我们的基线configuration的全屏幕大小。 以像素为单位

470×320像素(mdpi)

现在要按照3:4:6:8缩放比例来selectldpi,hdpi和xhdpi的可选drawable大小,我们需要从mdpi导出单位值。 即

470/4 = 117.5

320/4 = 80

除以4,因为mdpi的缩放比例是4,ldpi,hdpi和xhdpi的缩放比例分别是3,6和8。 现在只需将单位结果117.5和80乘以这些比例因子即可

LDPI

117.5 * 3 = 352.5

80 * 3 = 240

MDPI

117.5 * 4 = 470

80 * 4 = 320

华电国际

117.5 * 6 = 705

80 * 6 = 480

xhdpi

117.5 * 8 = 940

80 * 8 = 640

这些尺寸现在完美的3:4:6:8缩放比例。

是的,Dp(密度独立像素)是所有Photoshop都会关心的。 它不应该考虑像素的密度是多less。 超大像素的图像可以放在超小型高清UIbutton上。 或者你可能有几个像素复古风格的俄罗斯方块的A0海报。 这是因为他们可以缩放。 很less像素被放大到大面积,并且很多像素按比例缩小了屏幕上的小区域。

所以select你的目标链接到屏幕尺寸的大小,并在Photoshop中使用。 (也检查谁使用什么…使用的大小饼图 )

直觉这个网站帮我链接到博客页面 :

在运行时,平台透明地处理所需的dp单位的任何缩放,基于所使用的屏幕的实际密度。

(平台不会缩放 – 密度比处理是由Android完成的;不是你),这与UI非常相关:

强烈build议使用dp单位定义您的应用程序的用户界面,作为确保在不同屏幕上正确显示您的用户界面的一种方式。

因为您希望UI元素在所有设备上显示相同,所以它将根据该公式中计算的像素数进行缩放。 而且,如果dp被缩小的方式使得它变得过于空闲或密集,那么这样做看起来不太好。

由于Photoshop中的分辨率是以每英寸像素为单位设置的,正如谷歌的官方文档所说,Android将要求以dpi为单位设置图像。

在所有设备上都是一样的,所以它将根据它在公式中计算的像素数进行缩放。