【问题标题】:How do I convert ppi into dpi for Android images?如何将 ppi 转换为 Android 图像的 dpi?
【发布时间】:2011-08-03 16:42:22
【问题描述】:

我已经开始使用 Adob​​e Photoshop 为我的 Android 应用程序制作图形。但我无法继续,因为 Photoshop 中的分辨率以每英寸像素为单位设置,而谷歌官方文档称 Android 需要以 dpi 设置图像。我在网上搜索了两者之间的转换,但从未找到任何合适的公式。

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

【问题讨论】:

  • photoshop中设置的ppi只影响大图在纸上的打印效果,对android中的图像显示没有影响...
  • 嗨@StevenByle,虽然这在一般情况下是正确的,但在Android 和Android 的手机上下文中不能表示相同的意思,可以吗?打印定义对于您可以在 Internet 上找到的所有搜索结果(例如“HTC Sensation 屏幕分辨率”显示的是 PPI 而不是 DPI?我在媒体行业的经验表明,人们实际上也将 dpi 用于印刷设计和 Photoshop 演讲。许多人同时使用 ppi 和 dpi
  • @fuzzybee 虽然 ppi 和 dpi 并不等效(因为某些屏幕技术使用多个像素来生成一个点等),但 Android 可以使用其中任何一个。但是,Android 不会将此元数据用于图像。例如,以 100dpi 创建 100x100 图像,然后在 Photoshop 中以 1000dpi 创建。虽然它们在屏幕上的外观没有区别(始终为 100x100),但如果您打印它们,它们的物理尺寸将不同。 Android 根据您放入的可绘制密度文件夹(不是 Photoshop 中的设置)、drawable-hdpi = 240dpi、drawable-xhdpi = 320dpi 等了解图像的 dpi。
  • @fuzzybee 因此,当您查看屏幕规格时,您可能会在 ppi 中看到它们,这很好,因为大多数屏幕技术转换为 1 像素 = 1 点。 Android 在软件中绘制屏幕时使用 dpi 引用点,因为 1 个像素可能不是所有显示器上的 1 个点,这是一种标准化单位的方式。查看我在Understanding Density Independence in Android 上的博客了解更多信息。

标签: android dpi


【解决方案1】:

Dp 是与密度无关的像素,用于概括屏幕具有的像素数。这些是来自http://developer.android.com/guide/practices/screens_support.html的概括数字

  • xlarge 屏幕至少为 960dp x 720dp
  • 大屏幕至少为 640dp x 480dp
  • 普通屏幕至少为 470dp x 320dp
  • 小屏幕至少为 426dp x 320dp

屏幕的通用 Dpi 值:

  • 用于低密度 (ldpi) 屏幕 (~120dpi) 的 ldpi 资源
  • mdpi 用于中等密度 (mdpi) 屏幕 (~160dpi) 的资源。 (这是基线密度。)
  • 用于高密度 (hdpi) 屏幕 (~240dpi) 的 hdpi 资源。
  • 用于超高密度 (xhdpi) 屏幕 (~320dpi) 的 xhdpi 资源。

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

  • ldpi
    • 垂直 = 426 * 120 / 160 = 319.5px
    • 水平 = 320 * 120 / 160 = 240 像素
  • mdpi
    • 垂直 = 470 * 160 / 160 = 470 像素
    • 水平 = 320 * 160 / 160 = 320 像素
  • hdpi
    • 垂直 = 640 * 240 / 160 = 960 像素
    • 水平 = 480 * 240 / 160 = 720 像素

编辑 - 添加 xhdpi,因为它们变得越来越流行

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

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

/编辑


如果您使用这些尺寸,您的图像在任何屏幕上都会看起来很棒。请务必在 dp 中的代码中定义尺寸,但 Android 将自行处理上述转换。

【讨论】:

  • 我读过同样的内容。但是如何设置屏幕分辨率,因为 adobe photoshop 定义了每英寸像素的分辨率,而 google doc。以 dpi 给出。
  • 感谢您的解释。它在很大程度上有所帮助。但是仍然存在将屏幕分辨率从 dpi 转换为 ppi 的困惑。所以我使用以下链接作为我对屏幕分辨率的假设:- @ 987654322@
  • 对不起,我想我有点想念这个问题。您说 Photoshop 需要每英寸像素的大小值,但它不需要。 PPI 设置仅在您要打印时使用,对于屏幕,您唯一感兴趣的是图像的大小(以像素为单位)。对于 android 图像,使用我上面给出的像素值,它们将在任何显示器上提供清晰的图像。例如对于 hdpi,全屏纹理应为 960px x 720px,并且可以具有任何 dpi 或 ppi 值。然后,您使用 dp 确保它填满 android 中的屏幕。这意味着如果将其换成较小的图像,它仍然会填满屏幕
  • 哇,这真是令人难以置信的错误,我不敢相信它得到了这么多的支持。屏幕密度和屏幕尺寸不一样。平板电脑可以是 ldpi,小手机可以是 xhdpi,反之亦然。这些计算都是不正确的,因为对于每个密度,160 dp 大约是一英寸。嗯……
  • @MichaelAllen 你从来没有提到屏幕的大小? dp x dp 代表一个物理尺寸,你所有的计算都是从屏幕的 dp x dp 物理尺寸来计算的。您的主要不正确假设是屏幕尺寸 = 屏幕密度。你计算一个小屏幕总是 ldpi(错误),一个普通屏幕总是 mdpi(错误),等等。你的例子显示了 4 个屏幕尺寸和 4 个密度。实际上,每个屏幕尺寸需要 4 个密度尺寸,所以这里会有 16 个尺寸(现在有 5 个,所以真的有 20 个)。证明 - developer.android.com/about/dashboards/index.html#Screens.
【解决方案2】:

我不同意 Michael Allen 的回答,因为 ldpi、mdpi、hdpi 和 xdpi 的最终分辨率不满足 3:4:6:8 的缩放比例,用于 google 文档中提到的替代位图在 '替代 Drawables'

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

因此,我建议您采用最小尺寸为

的基线示例

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

像素 = dp * (dpi/160);对于基线 px = dp * (160/160) = dp * 1 所以 px = dp。这意味着我们的基线配置的全屏尺寸。以像素为单位

470 X 320 像素 (mdpi)

现在要遵循 3:4:6:8 的缩放比例来获取 ldpi、hdpi 和 xhdpi 的替代绘图大小,我们需要从 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

hdpi

117.5 * 6 = 705

80 * 6 = 480

xhdpi

117.5 * 8 = 940

80 * 8 = 640

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

【讨论】:

    【解决方案3】:

    是的,Dp(密度独立像素)是 Photoshop 所关心的全部。它不应该考虑像素的密度。超高像素的图像可以放在一个超小的高清 UI 按钮上,因为它所关心的一切。或者你可能有几个像素的俄罗斯方块复古风格的 A0 海报。这是因为它们可以缩放。屏幕上的大区域放大了几个像素,而屏幕上的小区域缩小了许多像素。

    所以选择你的目标link to sizes 屏幕尺寸并在 Photoshop 中使用它。 (也看看谁用什么...pie chart of sizes used

    对于直觉,这个网站帮助了我link to blog page

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

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

    强烈建议使用 dp 单位来定义应用程序的 UI,以确保您的 UI 在不同屏幕上正确显示。

    因为您希望 UI 元素在所有设备上显示相同,所以它会根据它在该公式中计算的像素数进行缩放。如果 dp 以某种方式缩放,使其变得过于空闲或过于密集,那看起来就不太好了。

    【讨论】:

      【解决方案4】:

      由于 Photoshop 中的分辨率以每英寸像素为单位设置,而 Google 官方文档称 Android 需要以 dpi 设置图像。

      【讨论】:

        【解决方案5】:

        在所有设备上都相同,因此它将根据它在该公式中计算的像素数进行缩放。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-05-10
          • 1970-01-01
          • 2012-11-13
          • 1970-01-01
          • 2012-01-18
          相关资源
          最近更新 更多