~rom1v/blog { un blog libre }

Résolution, pixels, points, dpi : un casse-tête insoluble ?

Ce billet fait suite à une question que je me posais sur la résolution dpi des écrans (notamment la valeur erronée détectée par défaut sous Gnome), qui m’avait amené à effectuer un rapport de bug, tout en pointant du doigt certains problèmes qui surviendraient si Gnome détectait correctement le dpi. Ce bug est maintenant corrigé dans la nougelle version de Gnome, celle embarquée dans la future Ubuntu 9.04 Jaunty Jackalope. C’est l’occasion de faire le point.

Définitions

Afin de comprendre les problèmes, il est important de définir chacun des concepts (je limite ici leur définition au cas d’une image numérique affichée sur un écran).

pixel

Le pixel, abrégé px, est une unité de surface permettant de définir la base d’une image numérique. Son nom provient de la locution anglaise « picture element », qui signifie « élément d’image » ou « point élémentaire ». Il n’a a priori pas de taille « réelle ».

point

Le point (Pica), abrégé pt, est une unité de longueur. Un point pica mesure 1/72e de pouce (1 pouce = 2,54 cm), c’est-à-dire environ 0,03528 cm, soit un peu plus d’un tiers de millimètre.

résolution

La résolution permet de donner une taille réelle à un pixel. Elle est souvent exprimée en DPI (Dot Per Inch : Point Par Pouce). Attention, dans cette unité, le point signifie pixel (et non point Pica, puisque par définition, le nombre de points Pica par pouce est toujours 72, tout comme le nombre de millimètres dans un centimètre est toujours 10).

définition

La définition d’une image ou d’un écran est le nombre de pixels qui composent l’image ou que peut afficher un écran. Elle est souvent donnée sous la forme nombre de pixels horizontalement × nombre de pixels verticalement, par exemple 640×480.

Résolution dpi de l’écran

Intérêt du dpi

Combien mesure sur l’écran une image en 640×480 ?
Quelle est la hauteur en pixels d’un texte en taille 18 pt ?
Cela dépend de la taille des pixels ! Par exemple, une image en 640×480 sera 4 fois plus petite (2 fois dans chaque dimension) sur écran 7” que sur un écran 14”, si les deux écrans ont la même définition (disons 1024×768). Pareil pour la taille d’un texte.

Quelle taille en pixels doit avoir un rectangle de 13×8 cm ?
Cela dépend également de la taille des pixels : le rectangle sera « plus petit » (en pixels) sur un écran de moindre définition.

Pour déterminer la réponse à ces questions, la connaissance de la résolution, exprimée en dpi, est nécessaire : elle permet de faire la conversion entre une mesure réelle (homogène aux centimètres) et une mesure en nombre de pixels.

Valeur réelle du dpi de l’écran

En ligne de commande

Pour connaître le dpi d’un écran, il suffit de taper :

xdpyinfo | grep resolution

À la main

Il est également possible d’effectuer le calcul à la main (comme je l’ai fait sur le post et sur le bug report cités au début), en connaissant d’une part la définition de l’écran, et d’autre part :

  • soit la diagnole d’écran (15,4” par exemple) ainsi que le ratio (16/10) ;
  • soit la hauteur et la largeur (en centimètres par exemple).

Juste pour illustrer le premier exemple, avec ces calculs on trouve qu’un écran 7” en 1024×768 a une résolution de 183 dpi, et donc qu’une image en 640×480 affichée à l’écran mesure précisément 3,5×2,625” (8,89×6,6675 cm). De même, un écran 14” en 1024×768 a une résolution de 91,5dpi, et donc qu’une image en 640×480 affichée à l’écran mesure précisément 7×5,25” (17,78×13,335 cm).

On remarque que si l’on fait une capture d’écran de ces deux images, dont la surface de l’une 4 fois plus petite que celle l’autre, le résultat sera identique (en 640×480) : une capture d’écran (une image numérique) affichée à l’écran ne prend en compte que la taille en pixels. Ceci a une conséquence importante : une fenêtre F1 sur un écran E1 plus petite qu’une fenêtre F2 sur un écran E2 peut apparaître plus grande sur des captures d’écran.

Valeur du dpi configurée

Le système, en connaissant le dpi, est donc capable d’afficher des objets dont les mesures sont exprimées en centimètres (ou unités homogènes, comme les pouces).

Le problème, c’est qu’il n’utilise pas toujours la valeur « réelle » du dpi : il utilise souvent une valeur pré-configurée (72 ou 96), indépendante de l’écran. La résolution dpi, seule valeur permettant de faire le lien avec la mesure réelle, est choisie arbitrairement : elle ne sert donc à rien. Tout cela avait un sens physique à l’origine, où le matériel avait toujours une résolution très proche de 72 ou de 96 (voir cet article).

Pour continuer à lui donner un sens, il faut que le système utilise le dpi réel de l’écran : c’est le cas depuis KDE4 et Gnome 2.25 ; Windows et MacOS, quant-à-eux, continuent à utiliser une valeur pré-configurée dénuée de sens.

On a donc, dans les deux environnements de bureau principaux sous GNU/Linux, une valeur correcte du dpi : c’est donc gagné !

Malheureusement, ce n’est pas si simple.

Problèmes

Problèmes théoriques

Nous possèdons un écran 15,4” de définition 1024×768, et nous souhaitons le remplacer par un nouvel écran 15,4” de définition 2048×1536 (donc de résolution double dans chaque direction).

Comment doit se comporter l’affichage des polices de caractères ?

Deux solutions :

  • la taille des polices reste identique en pixels (px) : la taille apparente est donc deux fois plus petite (dans chaque dimension) ;
  • la taille des polices reste identique en points (pt) : la taille apparente ne change pas, mais chaque caractère est composée de plus de pixels.

La réponse n’est pas évidente.

La première proposition qui consiste à garder la taille identique en pixels ne peut pas être absolument vraie : si nous utilisions un écran 15,4” de définition 20480×15360 (pourquoi pas?), des lettres de 18 pixels seraient totalement illisibles par l’œil humain.

La seconde semble donc plus valable, mais nous pouvons objecter que la taille des caractères que nous avions sur notre écran 15,4” en 1024×768 est plus grande que celle dont nous avons réellement besoin : nous ne pouvions pas la diminuer à cause de la faible résolution de l’écran (une lettre représentée par 4 pixels n’est qu’une tache noire). Un écran de meilleure résolution permettrait de diminuer la taille du texte afin d’obtenir une taille réelle « meilleure ».

Nous pouvons également faire remarquer, de manière peut-être moins rigoureuse, que si nous avons investi dans un écran de meilleure définition, c’est pour « avoir plus de place ».

Mon point de vue est donc celui-ci : il existe un ensemble de tailles (une taille pour les titres, une pour les sous-titres, une pour les paragraphes…), exprimées en points, idéales. Plus nous nous en éloignons, plus nous avons une impression de « trop gros » ou « trop petit ». La seconde proposition, qui consiste à garder la taille des polices identique en points est d’après moi asymptotiquement vraie : que nous possédions un écran 20480×15360 ou 40960×30720 ne doit pas changer la taille apparente des polices.

Mais pour des résolutions trop petites (72 ou 96 dpi par exemple), une contrainte intervient fortement : les caractères doivent avoir une forme reconnaissable, et être « suffisamment lisses ». Impossible alors d’afficher des caractères dont la taille réelle serait lisible, mais dont l’équivalent en pixels est trop faible. ?ous sommes alors obligé d’augmenter artificiellement la taille réelle des polices de caractères.

Remarque : Ce raisonnement n’est valable que pour le changement de la résolution sur un écran de même taille réelle. Si nous voulions définir comment doit se comporter l’affichage sur un écran de résolution identique mais de taille plus grande (donc de meilleure définition), il faudrait prendre en compte l’éloignement des yeux par rapport à l’écran (nous sommes plus proches de l’écran sur un écran 7” que sur un écran 45”). A priori, je dirais ce que qui est asymptotiquement vrai n’est pas la conservation des tailles en points, mais la conservation des angles que forment le haut et le bas d’un caractère avec l’œil (ce qui est équivalent si on conserve un écran de même taille).

Si vous avez des remarques ou d’autres explications, je suis tout à fait ouvert, car ceci n’est que mon intuition :-)

Problèmes pratiques

En pratique, c’est compliqué.

La majorité des applications utilise des tailles de polices de caractères exprimées en points, mais des parties de l’interface sont exprimées en pixels. Par exemple, la barre de menu de Gnome a par défaut une hauteur de 24px… et son texte a une taille de 10pt. Ces mesures donnent un rendu cohérent à 96 dpi, mais plus le dpi augmente, plus le texte est « gros » par rapport à la barre (les variations de dpi ne font varier que les mesures exprimées en points). Voici le rendu par défaut sur mon écran 130 dpi :

high-dpi

Pour les applications, ce problème est contournable : on peut facilement les configurer pour définir la taille des composants ou la taille des polices.

Mais le plus gros problème se pose sur les sites internet : certains sites expriment leurs mesures en pixels et d’autres en points. Plus la valeur du dpi est élevée, plus les sites exprimés en points paraîtront gros par rapport à ceux exprimées en pixels. Sans parler des nombreux sites qui mélangent les unités de mesure. Et le pire, c’est qu’il n’y a pas de « bonne manière de faire » : les tailles en pixels et les tailles en points ont chacunes leurs avantages et leurs inconvénients sur les sites internet. On ne peut donc pas espérer que ces problèmes soient gommés au fur et à mesure.

Tout ça pour ça !

La solution que j’utilise pour éviter ces différences de tailles de texte est de… faire croire à Gnome que mon écran est en 96 dpi. Comme s’il avait une diagonale de 20,85” (15,4×130/96) : il se comporte donc exactement comme un écran 20,85” à 96 dpi qui aurait été rétréci. Au lieu de définir mes polices en 7pt à 130 dpi, je leur donne la valeur 10pt à 96 dpi, et ça évite les incohérences de rendu.

Évidemment, comme je l’ai déjà signalé, cette solution n’est pas satisfaisante : si au lieu de 130 dpi j’avais un écran à 200 dpi, les caractères seraient beaucoup trop petits si je configurais Gnome à 96 dpi (pour lui faire croire que mon écran est un 32,08”).

La valeur arbitraire donnée au dpi par le système rendait la résolution absolument dénuée de sens ; maintenant que la valeur est correcte, je la force à une valeur incorrecte pour avoir un rendu cohérent. C’était bien la peine !

Et je ne vois aucune solution envisageable pour obtenir un rendu cohérent actuellement sur d’éventuels écrans 200 ou 300 dpi. Pourtant, on pourrait penser a priori que les résolutions d’écran ne vont pas arrêter de s’améliorer dans les années à venir : ces problèmes seront-ils un frein à leur développement ?

Commentaires

yagraph

Ton raisonnement est surement valable en pratique… Mais, je suis désolé, malheureusement il est complètement faux en théorie.

Tu confonds dpi (dots per inch - point par pouce), une unité qui sert à mesurer la résolution pour des supports physiques (le plus petit point qu’une imprimante peu imprimer, qu’un scanner peut scanner…) et ppi (pixel per inch - pixel par pouce), une unité qui sert effectivement à mesurer la résolution d’une image numérique (par exemple l’affichage d’un moniteur)… Ce sont deux unités où l’entité la plus petite n’a pas de taille prédéfinie, mais elles ne mesure pas la même chose ! Une résolution d’écran ne s’exprime pas en dpi, mais en ppi !

Quand au point (pica), c’est une unité qui est utilisé en typographie, et qui elle a une taille fixe réelle… et qui est donc indépendante de la résolution de ton écran… Elle n’entre donc pas en jeu ici.

Enfin il y a les problèmes d’anti-crenelage (de lissage) qui se rajoute à tout ça, et dont tu n’a pas tenu compte…

Bref c’est courageux de s’attaquer à un tel problème, mais il faut partir sur de bonnes bases.

Pour finir, voici une tentative de définition de la Résolution :

La résolution d’une image est le rapport entre sa définition et sa surface, quel que soit le support utilisé. La définition est la quantité d’information découpée en unité élémentaire, généralement des pixels pour les écrans, et des points d’imprimante (dots) pour les supports imprimés. Tout le jeu de la résolution est d’être assez grande (c’est à dire avoir une définition suffisante dans une surface donnée) pour donner à l’oeil humain l’illusion, à une distance du support donnée, de la continuité en lui cachant sa structure élémentaire (pixels ou points). Ainsi une image peut avoir une résolution très faible, mais si on en est suffisamment loin celle-ci pourra être suffisante (pas besoin d’imprimer une affiche AO à plus de 25 dpi, puisqu’elle est faite pour être vue à plus de 3 mètres).

Il faut bien comprendre que la problématique de la résolution est fortement liée à celle du numérique, qui découpe l’information, et à des techniques d’impression qui utilisent des trames, c’est à dire de l’information binaire (tout ou rien). Comme dans les deux cas on a une unité extrêmement simple, on doit jouer sur sa quantité pour apporter de la finesse et du détail.

Pour exprimer la résolution on utilise deux unités, qui sont dépendantes du support, et exprimés en unité par pouce (1 pouce = 2.54 cm) : le pixel per inch (ppi) pour les images numériques sur écran où l’unité élémentaire est le pixel, et le dot per inch (dpi) pour les images imprimées où l’unité élémentaire est le point d’imprimante. On utilise les terme anglais (ppi et dpi) plutôt que leur traduction en français (pixels par pouce et point par pouce) car celle-ci génère des confusions (ppp ≠ ppp).

Pour convertir une image d’une unité à l’autre (et donc d’un support à l’autre), il faut tenir compte de deux problèmes potentiels : la résolution (c’est à dire la quantité d’information) et la structure de l’information (les pixels sont dans une grille bitmap, les points sont répartis dans une trame), en plus des éventuels problèmes de couleur. Pour contourner ces problèmes quant on imprime une image numérique, il faut que la grille de pixel soit au moins égale à la trame d’imprimante, ou à deux fois sa linéature. Si elle est inférieur, des pixels se dessineront à l’impression, ce qui arrive régulièrement quand on ne vérifie pas la résolution des images bitmaps trouvées sur Internet (qui sont pour la plupart à 72 ppi).

J’ai envie de dire wahooo !

Sur ce domaine messieurs, je suis tellement novice que je goberais n importe quoi. Néanmoins il semble régner une confusion totale entre les constructeur qui s’emmêle (ou en profite) et le public qui n’y comprend rien et qui prend : “le plus grand !”

®om

Merci de ta longue réponse :)

@yagraph

Tu confonds dpi (dots per inch - point par pouce), une unité qui sert à mesurer la résolution pour des supports physiques (le plus petit point qu’une imprimante peu imprimer, qu’un scanner peut scanner…) et ppi (pixel per inch - pixel par pouce), une unité qui sert effectivement à mesurer la résolution d’une image numérique (par exemple l’affichage d’un moniteur)…

Je suis d’accord avec toi, sur un écran ça devrait être PPI et non DPI (réservé à l’imprimante). Mais j’ai choisi volontairement d’utiliser DPI, car dans les préférences de Gnome, on choisit le DPI (mais en disant DPI, il faut comprendre PPI) de l’écran. C’est d’après toi une erreur d’écrire DPI dans les préférences de Gnome? (pour moi oui)

@yagraph

Quand au point (pica), c’est une unité qui est utilisé en typographie, et qui elle a une taille fixe réelle…

Euh, oui… c’est ce que j’ai dit, non?

C’est son équivalent en pixel qui varie selon le DPI.

@yagraph

Enfin il y a les problèmes d’anti-crenelage (de lissage) qui se rajoute à tout ça, et dont tu n’a pas tenu compte…

C’est vrai que je n’en ai pas explicitement parlé, mais il me semble que leur prise en compte est incluse dans ma phrase :

une contrainte intervient fortement : les caractères doivent avoir une forme reconnaissable, et être “suffisamment lisses”.

Précision sur les dpi :

Le DPI d’un écran, n’est pas le nombre de pixel par pouce… mais un nombre plus psychologique.

Dans un SDK de Microsoft datant au moins de Windows 3.0, il était expliqué que le choix de 96dpi (pour les écrans de l’époque…) n’était pas la résolution réelle de l’écran (qui devait avoisiner les 72dpi, valeur donnée sur les Macintosh…), mais une adéquation pour qu’un document affiché à l’écran ait le même aspect que le document imprimé par la suite sur une imprimante (dont les dpi sont, eux, réels).

Ce raisonnement, étant basé sur le fait que, la distance à laquelle on lit l’écran, n’est pas la même que celle à laquelle on lit un papier !

Sinon, ta commande magique me donne 95x96dpi. Normal ? (écran 17” 1280x1024).

Jeece

Beau billet de mise au point ®om.

Quant à la confusion dpi VS ppi elle n’a pas vraiment lieu d’être. Ici on parle bien de support numérique, point = pixel.

yagraph

Je m’excuses, tu avais volontairement fait l’omission, et pas une confusion.

Mais en effet pour moi c’est une erreur de mélanger ppi et dpi… ça donne l’illusion qu’une imprimante imprime des pixels, ou qu’un écran affiche des points de trames !

et un point n’est pas du tout égal à un pixel, ça peut être le cas mais la plupart du temps c’est faux, tout dépends du périphérique !

C’est un peu comme dire que les rayons de miel des abeilles sont structurés en grilles perpendiculaires x-y cartésiennes ….

Sinon sur le fond on est d’accord en fait (y compris l’histoire des points typographiques et du lisage).

Simplement ça m’arrache les yeux quand on me parle de dpi pour un écran… Il y a surement des origines commerciales à ça, comme le dit Sergio, mais ça n’empêche pas que ça soit complètement faux.

Après on s’étonne que les gens crois que tout ce qu’on affiche à l’écran va s’imprimer proprement… alors que ce n’est ni la même structuration, ni le même espace colorimétrique, ni la même unité…

Bref, ton article est intéressant, mais je tenais à m’insurger un peu contre cet erreur répandue…

Moi j’ai un problème de pixels noirs sur mon écran :

Quand je vais sur des sites libres en France (dont le miens), il y a du noir partout avec marquer en gros : HADOPI : «black-out» du Net français.

C’est grave docteur? Vous croyez que je pourrai revoir un net libre en France?

LordFarquaad

Tiens c’est amusant, j’avais indirectement relevé ce problème lorsque je suis passé à Hardy : certaines polices dans Firefox étaient beaucoup trop grandes (http://forum.ubuntu-fr.org/viewtopic.php?id=212726)

J’ai comme toi un écran 128 ppi mais Gnome est configuré en 96 ppi… Je dois dire que je n’aime pas trop ces solutions bancales, mais bon. Dans le cas présent je ressens comme l’impression que mon écran n’est pas utilisé « au maximum de ses capacités » puisque les objets qu’il affiche ne tiennent pas compte de ses propriétés réelles.

D’un autre côté, le fait que les objets graphiques (menus, boutons etc.) aient des tailles en pixels est un avantage (pour des résolutions pas trop élevées du moins, probablement pas au dessus de 150 ppi) , puisque cela permet d’en afficher plus sur l’écran. Par compte pour les tailles de polices il faut effectivement qu’elles soient en points comme tu l’expliques. Si tout était en points, à quoi bon avoir une résolution d’écran plus élevée puisqu’on afficherait alors exactement la même chose ? (plus nettement, certes, mais de loin ça ne change rien…)

En tout cas je pense que c’est un sujet qui n’est pas prêt d’être clos. Mais quand tu dis que les résolutions (en dpi) augmentent, je ne suis pas convaincu. La plupart des gens sont avec leur 1280×800 sur des 15,4″ voire 17″… Ou alors il faut regarder du côté téléphones, netbooks ou écrans haute gamme.

Calimo

Et le pire, c’est qu’il n’y a pas de « bonne manière de faire » : les tailles en pixels et les tailles en points ont chacunes leurs avantages et leurs inconvénients sur les sites internet.

Ceci me semble inexact, en effet on peut utiliser l’unité “em” définie en CSS, qui est une unité relative et indique un rapport de taille par rapport à l’élément parent. Par exemple, pour qu’un titre soit 2 fois plus gros que le reste du texte, on indique 2em.

La dimension de base est définie dans les préférences du navigateur, ce qui permet à un utilisateur de changer la taille des polices. La solution existe, c’est juste que (presque) personne ne l’applique.

®om

@Calimo

En effet, merci pour la précision. Ça se règle où la taille d’un em dans Firefox?

Par contre, pour les images, elles sont toujours en bitmap sur les sites web, donc avec une taille fixe en pixels…

Geronimo

Comment fait on avec les imprimantes ? On utilise bien des résolution

différentes. 300 dpi, 600 dpi etc… Pour les écrants à 300 dpi le

problème devrait être le même ?

Thibali

tout à fait d’accord avec yagraph. Cette confusion a le don de m’agacer moi aussi. la confusion est tellement répandu que même wikipédia était érronée.

Tou s’éclaire quand on sait qu’historiquement, dot=pixel, donc qu’un point (sous entendu “de l’écran”) correspond à un pixel. Seulement lorsqu’on travaille dans l’imprimerie, cela crée une certaine confusion.

Cette confusion est d’autant plus grave qu’elle est toujours employé par de nombreuses personnes dans le graphisme (il me semble que Photoshop faisait aussi l’erreur de proposer une résolution graphique en dpi à une certaine époque…), mais aussi et surtout par les vendeurs. Une “résolution” de 12 Mégapixel pour les appareils photo numériques n’est juste qu’une taille (et d’ailleurs, il faut diviser par 4, car cela comprend les 4 pixels des chaques composantes colorimétriques…).

Bref! En tout cas belle tentative de résumé. Article très complet, même si effectivement il y a une ambiguité sur dpi/ppi. Je suis sous Intrepid et je n’ai pas de problème de PPI. Et sous Jaunty, est-ce que ce problème apparait?

Bonjour

Pensez également que contrairement à ce que l’on dit un peu partout sur le net, l’impression sur une imprimante jet d’encre en qualité photo est suffisante à 200 dpi. C’est en imprimerie offset que la barrière de 300 dpi est indispensable. Peu de gens le croient mais c’est vrai ;-)

[…] Résolution, pixels, points, dpi : un casse-tête insoluble ? […]

lsga

Super article, on y voit enfin un peu plus clair…

Lafont François

Bonjour et merci pour cet article qui m’a pas mal éclairé. J’ai une petite question (je ne sais pas si c’est le lieu pour ça mais au pire ma question restera sans réponse, ce n’est pas très grave). Je suis sous Debian Squeeze et j’ai ça :

$ xdpyinfo | grep -C 1 resolution
  dimensions:    1920x1080 pixels (508x285 millimeters)
  resolution:    96x96 dots per inch
  depths (7):    24, 1, 4, 8, 15, 16, 32

1) Déjà, ça ne serait pas «96x96 Pixels per inch» (et non «dots») ?

2) Si j’applique mes petites règles de proportionnalités, je tombe sur un écran de 50,8x28,575 cm ce qui correspond à peu près à ce que donne la commande ci-dessus. Mais le problème, c’est que si je mesure mon écran avec mon bon vieux mètre de couturier, je tombe sur environ 48x27 cm (je mesure la zone d’affichage sans l’armature en plastique bien sûr) ce qui est quand même assez différent de ce que donne la commande. Comment ce se fait-il ?

Merci d’avance et merci bien pour l’article.

®om

@Lafont François

1) cf la définition de résolution dans le billet :

Elle est souvent exprimée en DPI (Dot Per Inch : Point Par Pouce). Attention, dans cette unité, le point signifie pixel.

2) La valeur écrite en dur pour que le système “connaisse” la taille réelle de l’écran ne doit pas être totalement exacte pour ton matériel.

Edmond Solin

Bonjour

Dur, dur pour moi de suivre toutes vos explications !…

Moi, j’ai un Windows Vista, diagonale écran 47 cm=18,5 pouces ; mon écran s’est beaucoup étiré vers le haut et le bas comme les icônes dont certaines on disparues. Depuis des jours je bataille pour réduire la résolution d’écran. Impossible ! D’ailleurs, OK a disparu aussi et rien ne change.J’ai aussi essayé de supprimer des raccourcis pour faire de la place à l’écran (mais je crois que cela est parfaitement inutile ??). J’ai aussi beaucoup de peine à retrouver ma messagerie.

Verriez-vous un conseil à me donner ?

Merci

E.S.

®om

@Edmond Solin

Les symptômes que vous décrivez correspondent simplement à une mauvaise configuration de la définition de votre écran. Je ne connais pas Windows Vista, mais il doit y avoir un menu pour changer la définition (1600×900 par exemple).

Choisissez-en une qui a le même aspect-ratio (le même rapport largeur/hauteur) que celui de votre écran, de préférence celle qui correspond à sa définition native (s’il s’agit d’un écran plat, ce qui est très probablement le cas).

Les commentaires sont fermés.