¿Cómo convierto ppi en dpi para las imágenes de Android?

Empecé a hacer gráficos para mi aplicación de Android con Adobe Photoshop. Pero no puedo continuar, ya que la resolución en Photoshop está configurada en píxeles por pulgada, ya que, como la documentación oficial de Google dice que Android requerirá imágenes establecidas en dpi. Busqué en la web la conversión entre los dos, pero nunca terminé con una fórmula adecuada.

Sé que la documentación de Android describe la relación como px = dp*dpi/160 . Pero mi problema es que si conozco los dpi, ¿dónde obtengo el valor de dp para usar en este cálculo? ¿O hay alguna suposición sobre el valor de dp? Estoy confundido.

Dp son píxeles independientes de densidad y se utilizan para generalizar el número de píxeles que tiene una pantalla. Estas son figuras generalizadas tomadas de http://developer.android.com/guide/practices/screens_support.html

  • Las pantallas xlarge son al menos 960dp x 720dp
  • pantallas de gran tamaño son de al menos 640dp x 480dp
  • las pantallas normales son al menos 470dp x 320dp
  • las pantallas pequeñas son al menos 426 pd x 320 pd

Valores Dpi generalizados para pantallas:

  • Recursos de ldpi para pantallas de baja densidad (ldpi) (~ 120dpi)
  • mdpi Resources para pantallas de densidad media (mdpi) (~ 160dpi). (Esta es la densidad de referencia).
  • Recursos hdpi para pantallas de alta densidad (hdpi) (~ 240 ppp).
  • xhdpi Recursos para pantallas extra de alta densidad (xhdpi) (~ 320 ppp).

Por lo tanto, el tamaño generalizado de sus recursos (suponiendo que estén en pantalla completa):

  • ldpi
    • Vertical = 426 * 120/160 = 319.5px
    • Horizontal = 320 * 120/160 = 240 px
  • mdpi
    • Vertical = 470 * 160/160 = 470px
    • Horizontal = 320 * 160/160 = 320px
  • hdpi
    • Vertical = 640 * 240/160 = 960px
    • Horizontal = 480 * 240/160 = 720px

Editar – agregando xhdpi a medida que se vuelven más populares

  • xhdpi
    • Vertical = 960 * 320/160 = 1920 px
    • Horizontal = 720 * 320/160 = 1440px

Estos valores deberían ser adecuados para la mayoría de las pantallas xhdpi, como los televisores y el Nexus 4, incluido el Nexus 10 (suponiendo que no creen una nueva categoría para esto, ya que son 25k x 16k, no lo sé porque no tengo manos en uno todavía).

/Editar


Si usa estos tamaños, sus imágenes se verán estupendas en cualquier pantalla. Sin embargo, asegúrese de definir tamaños en el código en dp, Android manejará la conversión descrita anteriormente por sí solo.

No estoy de acuerdo con la respuesta de Michael Allen porque las resoluciones resultantes para ldpi, mdpi, hdpi y xdpi no satisfacen los porcentajes de escala de 3: 4: 6: 8 para mapas de bits alternativos mencionados en los documentos de google aquí en ‘Dratables alternativos’

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

Por lo tanto, le sugiero que tome el ejemplo de referencia que tiene un tamaño mínimo de

470 x 320 dp ahora usando la fórmula de la misma documentación que calculamos la resolución de pantalla completa para el tamaño de pantalla de línea base

px = dp * (dpi / 160); para la línea base px = dp * (160/160) = dp * 1, entonces px = dp. Esto significa el tamaño de pantalla completa para nuestra configuración de línea base. en píxeles sería

470 X 320 px (mdpi)

ahora para seguir las proporciones de escala de 3: 4: 6: 8 para tamaños de drawables alternativos para ldpi, hdpi y xhdpi, necesitamos derivar los valores unitarios de mdpi. es decir

470/4 = 117.5

320/4 = 80

dividir por 4 porque la proporción de escala para mdpi es 4, las relaciones de escala para ldpi, hdpi y xhdpi son 3,6 y 8 respectivamente. ahora simplemente multiplique los resultados de la unidad 117.5 y 80 con estos factores de escala

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

Estos tamaños están ahora en perfectas proporciones de escala 3: 4: 6: 8.

Sí, Dp (píxeles independientes de densidad) es lo único que le importa a Photoshop. No debería considerar cuál será la densidad de los píxeles. Esa imagen de un gran número de píxeles se puede poner en un botón UI súper pequeño de alta definición para todo lo que le interesa. O puede que tenga pocos píxeles para un póster A0 de estilo retro de Tetris. Esto se debe a que pueden escalarse. Pocos píxeles se amplían para el área grande y muchos píxeles se reducen para el área pequeña de una pantalla.

Así que elija su enlace de destino para tamaños de pantalla y use eso en photoshop. (también mira quién usa qué … gráfico circular de tamaños utilizados )

Para la intuición, este sitio me ayudó a vincular a la página del blog :

En tiempo de ejecución, la plataforma maneja de forma transparente cualquier escalado de las unidades dp necesarias, en función de la densidad real de la pantalla en uso.

(la plataforma hace el escalamiento, el manejo de la relación de densidad lo realiza Android, no usted) y esto es extremadamente relevante para la UI:

Se recomienda encarecidamente usar unidades dp para definir la IU de su aplicación, como una forma de garantizar una visualización adecuada de su IU en diferentes pantallas.

Porque desea que los elementos de la interfaz de usuario aparezcan de la misma manera en todos los dispositivos, por lo que boostá la escala en función de la cantidad de píxeles que compute en esa fórmula. Y si el dp se escala de forma tal que se vuelva demasiado sobrio o denso, bueno, eso no se verá bien.

Como la resolución en Photoshop se establece en píxeles por pulgada, como la documentación oficial de Google dice que Android requerirá imágenes establecidas en dpi.

Lo mismo en todos los dispositivos, por lo que hará escala en función de la cantidad de píxeles que compute en esa fórmula.