web-dev-qa-db-fra.com

Comment convertir ppi en dpi pour Android images?

J'ai commencé à créer des graphiques pour mon application Android à l'aide d'Adobe Photoshop. Mais je ne peux pas continuer, car la résolution dans Photoshop est définie en pixels par pouce alors que, comme le dit la documentation officielle de Google, Android nécessitera des images définies en dpi. J'ai cherché sur le Web la conversion entre les deux mais je n'ai jamais trouvé de formule appropriée.

Je sais que la documentation Android décrit la relation comme px = dp*dpi/160. Mais mon problème est que si je connais dpi, où puis-je obtenir la valeur de dp à utiliser dans ce calcul? Ou y a-t-il une hypothèse sur la valeur de dp? Je suis confus.

25
Ruchira

Dp sont des pixels indépendants de la densité et sont utilisés pour généraliser le nombre de pixels d'un écran. Ce sont des chiffres généralisés tirés de http://developer.Android.com/guide/practices/screens_support.html

  • les écrans xlarge mesurent au moins 960dp x 720dp
  • les grands écrans mesurent au moins 640dp x 480dp
  • les écrans normaux mesurent au moins 470dp x 320dp
  • les petits écrans mesurent au moins 426dp x 320dp

Valeurs Dpi généralisées pour les écrans:

  • ressources ldpi pour les écrans basse densité (ldpi) (~ 120 dpi)
  • mdpi Ressources pour les écrans à densité moyenne (mdpi) (~ 160 dpi). (Il s'agit de la densité de base.)
  • hdpi Ressources pour les écrans haute densité (hdpi) (~ 240 dpi).
  • xhdpi Ressources pour les écrans à très haute densité (xhdpi) (~ 320 dpi).

Par conséquent taille généralisée de vos ressources (en supposant qu'elles soient en plein écran):

  • ldpi
    • Verticale = 426 * 120/160 = 319,5 px
    • Horizontal = 320 * 120/160 = 240px
  • mdpi
    • Verticale = 470 * 160/160 = 470px
    • Horizontal = 320 * 160/160 = 320px
  • hdpi
    • Verticale = 640 * 240/160 = 960px
    • Horizontal = 480 * 240/160 = 720px

Edit - ajout de xhdpi car ils sont de plus en plus populaires

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

Ces valeurs devraient convenir à la plupart des écrans xhdpi tels que les téléviseurs et le Nexus 4, y compris le Nexus 10 (en supposant qu'ils ne créent pas de nouvelle catégorie pour cela car il s'agit de 25k x 16k, je ne sais pas car je n'ai pas mains sur un encore).

/Modifier


Si vous utilisez ces tailles, vos images auront fière allure sur n'importe quel écran. Assurez-vous toutefois de définir les tailles dans le code dans dp, Android gérera seul la conversion décrite ci-dessus.

37
Michael Allen

Je ne suis pas d'accord avec la réponse de Michael Allen car les résolutions résultantes pour ldpi, mdpi, hdpi et xdpi ne satisfont pas les ratios de mise à l'échelle 3: 4: 6: 8 pour les bitmaps alternatifs mentionnés dans les documents Google ici sous `` Alternative Drawables ''

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

Par conséquent, je suggère que vous preniez l'exemple de base qui a une taille minimale de

470 x 320 dp maintenant en utilisant la formule de la même documentation, nous calculons la résolution plein écran pour la taille de l'écran de base

px = dp * (dpi/160); pour la ligne de base px = dp * (160/160) = dp * 1 donc px = dp. Cela signifie la taille plein écran pour notre configuration de base. en pixels serait

470 X 320 px (mdpi)

maintenant, pour suivre les ratios de mise à l'échelle 3: 4: 6: 8 pour les tailles de tirables alternatives pour ldpi, hdpi et xhdpi, nous devons dériver les valeurs unitaires de mdpi. c'est à dire.

470/4 = 117,5

320/4 = 80

divisez par 4 car le rapport de mise à l'échelle pour mdpi est de 4, les rapports de mise à l'échelle pour ldpi, hdpi et xhdpi sont respectivement de 3,6 et 8. il suffit maintenant de multiplier les résultats unitaires 117,5 et 80 avec ces facteurs de mise à l'échelle

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

Ces tailles sont maintenant dans des rapports de mise à l'échelle 3: 4: 6: 8 parfaits.

5
Nouman Hanif

Oui, Dp (Densité indépendante pixels) est tout ce dont Photoshop se souciera. Il ne faut pas tenir compte de la densité des pixels. Cette image d'un nombre très élevé de pixels peut être placée sur un très petit bouton d'interface utilisateur haute définition pour tout ce qui l'intéresse. Ou vous pouvez avoir quelques pixels pour une affiche A0 de style rétro de Tetris. C'est parce qu'ils peuvent être mis à l'échelle. Peu de pixels sont mis à l'échelle pour la grande zone, et de nombreux pixels sont réduits pour la petite zone sur un écran.

Alors choisissez votre cible lien vers les tailles taille de l'écran et utilisez-la dans Photoshop. (Vérifiez également qui utilise quoi ... diagramme à secteurs des tailles utilisées )

Pour l'intuition, ce site m'a aidé lien vers la page du blog :

Au moment de l'exécution, la plate-forme gère de manière transparente toute mise à l'échelle des unités dp nécessaires, en fonction de la densité réelle de l'écran utilisé.

(la plate-forme effectue la mise à l'échelle - la gestion du rapport de densité est effectuée par Android; pas par vous) et cela est extrêmement pertinent pour l'interface utilisateur:

L'utilisation d'unités dp pour définir l'interface utilisateur de votre application est fortement recommandée, afin de garantir un affichage correct de votre interface utilisateur sur différents écrans.

Parce que vous voulez que les éléments de l'interface utilisateur apparaissent de la même manière sur tous les appareils, il effectuera une mise à l'échelle en fonction du nombre de pixels qu'il calcule dans cette formule. Et si le dp est mis à l'échelle de telle sorte qu'il devienne trop épargné ou trop dense, eh bien cela n'aura pas l'air bien.

1
Vass

Comme la résolution dans Photoshop est définie en pixels par pouce, comme le dit la documentation officielle de Google Android nécessitera des images définies en dpi.

1
ppi reclaim

La même chose sur tous les appareils, il effectuera donc une mise à l'échelle en fonction du nombre de pixels qu'il calcule dans cette formule.

0
ppi news