Rendu en sous-pixels d'images vectorielles arbitraires (Haarmony LCD)

Le rendu sous-pixel ( wiki ) est un moyen d'augmenter la résolution visible d'un affichage LCD ou OLED en rendant les pixels en fonction des propriétés de l'écran. Le fait est que chaque pixel de l'écran se compose en fait de sous-pixels rouges, verts et bleus séparés.


Dans un article, je veux parler de la méthode LCD Haarmony, qui est utilisée dans les dernières versions de freetype, et comment l'adapter pour des images vectorielles arbitraires et des configurations de sous-pixels.



À quoi ressemblent les images source


La photographie, c'est difficile de transmettre les bénéfices. Pour comparaison, vous pouvez regarder l'image suivante. Si l'une des configurations de pixels est la même que votre moniteur, la différence devrait être significative.



Les créateurs de U • HODL m'ont approché avec une proposition pour adapter le rendu sous-pixel pour leur appareil. L'appareil est un portefeuille de crypto-monnaie miniature avec un écran OLED de 0,96 "(120 × 180). Ils ont un blog (en anglais) décrivant comment ils sont attentifs à la commodité et comment tirer le maximum d'un petit écran. Par conséquent, ils avaient besoin d'un SPR pour les icônes et le texte.


Arrière-plan (ClearType)


Sur Internet, vous pouvez trouver une description du mécanisme ClearType utilisé dans Windows. La meilleure description, à mon avis, se trouve sur grc.com . Ensuite, une courte pression pour ceux qui ne souhaitent pas entrer dans les détails. ClearType comprend deux étapes:


1. Le texte est rendu avec une largeur de trois fois l'original


Chaque pixel de rendu est responsable d'un sous-pixel de couleur:



Si vous affichez simplement ce texte à l'écran, vous verrez une aberration de couleur sur les bords des lettres:



2. Le filtre change la couleur (mais pas la luminosité) des pixels voisins


Et restaure l'équilibre des couleurs local:



Cette méthode présente plusieurs inconvénients:


  1. Il n'est pas évident de savoir comment l'appliquer avec des images en couleur.
  2. Le filtre est compliqué si les sous-pixels ne sont pas sur la même ligne (la configuration de l'écran sera légèrement inférieure)
  3. Le filtre lui-même est protégé par un brevet Microsoft. Peut-être que quelqu'un se souvient que par défaut dans les premières versions du rendu de sous-pixels en mode libre, il était désactivé en raison de brevets.

Haarmony lcd


Et voici l'algorithme LCD Haarmony. En plus de la lettre de son auteur , sur Internet, il n'y a pratiquement aucune information sur l'algorithme. Mais, l'algorithme lui-même est simple et intuitif. Il est nécessaire de rendre le texte 3 fois avec un décalage égal au décalage de sous-pixel et d'ajouter les canaux de couleur.


Supposons que si vous avez une matrice de cette configuration:



Vous devez rendre et ajouter:


  1. Un canal bleu avec un décalage horizontal de -0,25 pixels
  2. Canal vert avec un décalage de +0,25 pixels horizontalement
  3. Canal rouge avec un décalage vertical de +0,5 pixels

Le schéma de rendu sera quelque chose comme ça.



Svg


Le moyen le plus simple était de rendre des images SVG. Il suffit de biaiser la viewBox (3 fois), en remplaçant:


viewBox="0 0 120 180" 

sur


 viewBox="0.25 0 120.25 180" 

Un exemple de rendu des icônes:



Images:



Configuration de la matrice


Le lecteur attentif pourrait remplacer les échecs en couleur sur les images. Cela est dû au fait que l'affichage pour lequel l'algorithme a été développé a approximativement la matrice suivante:



Autrement dit, les sous-pixels sur les lignes paires et impaires sont mis en miroir. Dans ce cas, il suffit de rendre avec deux configurations différentes, et de prendre des lignes paires d'une image et des lignes impaires de l'autre.


P.S. mcufont


Si vous devez utiliser le rendu de sous-pixels dans mcufont (une bibliothèque pour le rendu des polices sur les microcontrôleurs), vous devez patcher encoder / freetype_import.cc et définir Haarmony LCD sur FT_Render_Glyph (face-> glyph, FT_RENDER_MODE_LCD) . Et à la fin du texte, n'oubliez pas que la largeur des lettres sera 3 fois plus grande que nécessaire.

Source: https://habr.com/ru/post/fr474876/


All Articles