Introduction
Les algorithmes d'affichage sont des méthodes informatiques utilisées pour présenter des images, du texte, des graphiques et des animations sur un écran. Ils optimisent la manière dont les informations visuelles sont rendues pour garantir que l'affichage est rapide, précis et efficace. Les algorithmes d'affichage sont fondamentaux dans des domaines comme le rendu graphique, la manipulation de polices de caractères, le traitement des pixels, et l'affichage de contenu 3D ou 2D. Voici quelques types courants d'algorithmes d'affichage :
- Algorithmes de rendu : Ils calculent la manière dont les objets 3D ou 2D doivent apparaître à l'écran. Cela comprend le rendu par lancer de rayons (ray tracing), le rendu basé sur la rastérisation, et le rendu par radiosité, chacun ayant des approches spécifiques pour gérer l'ombre, la lumière, et la perspective des objets.
- Algorithmes de rasterisation : Convertissent les formes géométriques (comme des lignes, des courbes et des polygones) en pixels à afficher sur l'écran. Par exemple, l'algorithme de Bresenham est utilisé pour tracer des lignes droites entre des points discrets.
- Algorithmes de gestion des polices de caractères et du texte : Ils incluent des techniques pour le rendu de texte de manière lisible, par exemple, en utilisant des méthodes d'anticrénelage pour adoucir les bords des caractères, surtout pour les petites tailles de polices.
- Algorithmes de compression et décompression : Souvent utilisés pour les images et les vidéos, ils compressent les données pour un stockage ou un transfert efficace, puis décompressent pour l'affichage, comme les algorithmes JPEG ou MPEG.
- Algorithmes de composition de l'image : Ils combinent plusieurs sources visuelles pour en faire une seule image affichée à l'écran. Dans les systèmes d'exploitation modernes, la composition est utilisée pour afficher plusieurs fenêtres de manière fluide (par exemple, par transparence ou par effets visuels).
- Algorithmes de traitement des pixels (ou de "pixel shading") : En 3D, ils ajustent la couleur, la luminosité, et l'ombrage de chaque pixel pour produire des effets comme l'éclairage réaliste, les ombres et les reflets. Ces algorithmes sont souvent implémentés via des "shaders" sur des unités de traitement graphique (GPU).
- Algorithmes d'anticrénelage (antialiasing) : Ils adoucissent les bords "en escalier" des images pour un rendu plus lisse, ce qui est particulièrement important pour le texte et les graphiques avec des contours courbes.
- Algorithme de gestion des espaces colorimétriques : Les algorithmes de colorimétrie convertissent les valeurs de couleur d'un espace à un autre (par exemple, de RGB à CMYK ou à sRGB) pour assurer que les couleurs s'affichent de manière cohérente sur différents écrans et imprimantes.
- Algorithme de correction gamma : Cette technique ajuste la luminosité de l'image pour qu'elle corresponde aux capacités du dispositif d'affichage et à la perception humaine de la luminosité. Une correction gamma est souvent appliquée pour éviter que les couleurs apparaissent trop sombres ou trop claires.
- Algorithme d'étalonnage des couleurs : Les algorithmes d'étalonnage comparent les couleurs affichées à des standards de référence pour corriger les déviations de couleur. Cela est crucial dans les applications professionnelles (comme la photographie ou le design), où les couleurs doivent être fidèles.
- Algorithme de conversion et cartographie de couleurs : Lors du rendu d'images HDR (High Dynamic Range) sur des écrans SDR (Standard Dynamic Range), la cartographie de tons adapte les couleurs pour respecter les limites d'intensité lumineuse de l'écran. Les algorithmes de cartographie de tons sont des exemples de colorimétrie appliquée dans les algorithmes d'affichage.
- Algorithmes de dithering : Utilisés pour simuler des couleurs lorsqu'un écran a une palette limitée, ces algorithmes distribuent des pixels de différentes couleurs pour créer l'illusion de teintes intermédiaires.
Voici différents algorithmes en lien avec l'affichage, comme : Centrer une chaîne de caractères, Cercle avec PI, Conversion de 4 planes en BitMap, Ligne de Bézier, Mode 320x200 pixels en 256 couleurs,...
Centrer une chaîne de caractères
Un algorithme pour centrer une chaîne de caractères consiste à placer le texte de manière équilibrée dans une largeur donnée, typiquement en ajoutant des espaces de part et d'autre. Lorsqu'on veut centrer une chaîne de caractères à l'écran ou dans un espace quelconque, on utilise habituellement l'algorithme suivant pour déterminer sa position de départ :
X ← ( Largeur de l'espace - Longueur de la chaîne de caractères ) / 2 |
Cercle avec PI
Cette algorithme montre comment on peut arriver à afficher un cercle avec le nombre PI, c'est-a-dire en utilisant les fonctions COS et SIN. Bien que cette technique soit très peut efficace par rapport au technique de Bézier, elle en demeure pas moins facile à comprendre et à imaginer. Voici donc son algorithme :
MODULE Cercle(valeur X, valeur Y, valeur Rayon) Fin ← PI / 2 Pente ← X / Y Saute ← Fin / ( R x 2 x Pente ) BOUCLE POUR Degré ← 0 JUSQU'A Fin AVEC SAUT DE Saute A ← COS(Degré) x Rayon x Pente B ← SIN(Degré) x Rayon x Pente Affiche Point ( X + A, Y + B ) Affiche Point ( X + A, Y B ) Affiche Point ( X A, Y + B ) Affiche Point ( X A, Y B ) FIN BOUCLE |
Conversion de 4 planes en BitMap
Afin de permettre une meilleure compréhension d'une image affiché dans un mode vidéo 16 couleurs de standard EGA, VGA et Super VGA, on pourra utiliser l'algorithme suivant permettant de transformer une données totalement linéaire les 4 planes en question :
Largeur ← Octets par ligne / 4 BT ← 0 P1 ← 0 P2 ← Largeur P3 ← Largeur x 2 P4 ← P2 + P3 BOUCLE POUR Base ← 0 JUSQU'A Largeur 1 BOUCLE POUR IBit ← 0 JUSQU'A 7 AndMask ← 1 décalage de bit vers la gauche IBit XL [ 7 IBit ] ← (((Tampon [ P1 ] ∩ AndMask ) décalage de bit vers la droite IBit) décalage de bits vers la gauche 0 ) + (((Tampon [ P2 ] ∩ AndMask ) décalage de bit vers la droite IBit) décalage de bits vers la gauche 1 ) + (((Tampon [ P3 ] ∩ AndMask ) décalage de bit vers la droite IBit) décalage de bits vers la gauche 2 ) + (((Tampon [ P4 ] ∩ AndMask ) décalage de bit vers la droite IBit) décalage de bits vers la gauche 3 ) FIN BOUCLE POUR P1 ← P1 + 1 P2 ← P2 + 1 P3 ← P3 + 1 P4 ← P4 + 1 BOUCLE POUR IBit ← 0 JUSQU'A 3 Tampon BitMap [ BT ] ← ( XL [ IBit x 2] / 16) + XL [ ( IBit x 2 ) + 1] BT ← BT + 1 FIN BOUCLE POUR FIN BOUCLE POUR |
Ligne de Bézier
La ligne de Bézier est un algorithme très efficace permettant d'afficher rapidement une ligne à l'écran sans pour autant utiliser un seul calcul à virgule flottante. En voici l'algorithme :
MODULE Ligne(variable X1 , variable Y1 , variable X2, variable Y2 , variable Couleur ) SI Y2 = Y1 ALORS Afficher Ligne Horizontale ( X1 , Y1 , X2 ), Couleur SINON SI Abs ( X2 X1 ) < Abs( Y2 - Y1) ALORS SI Y1 > Y2 ALORS ECHANGER X1, X2 ECHANGER Y1, Y2 FIN SI SI X2 > X1 ALORS Direction Incrémentation ← 1 SINON Direction Incrémentation ← -1 FIN SI Delta Y ← Y2 - Y1 Delta X ← Abs ( X2 X1 ) Delta ← Delta X x 2 Delta Y A inc ← ( Delta X Delta Y ) x 2 B inc ← Delta X x 2 J ← X1 Afficher Pixel ( X1 , Y1 ), Couleur I ← Y1 + 1 BOUCLE FAIRE TANT QUE I <= Y2 SI Delta >= 0 ALORS J ← J + Direction Incrémentation Delta ← Delta + A inc SINON Delta ← Delta + B inc FIN SI Afficher Pixel( J , I ), Couleur I ← I + 1 FIN BOUCLE FAIRE TANT QUE SINON SI Y1 > Y2 ALORS ECHANGER X1 , X2 ECHANGER Y1 , Y2 FIN SI SI Y2 > Y1 ALORS Direction Incrémentation ← 1 SINON Direction Incrémentation ← -1 FIN SI Delta X ← X2 X1 Delta Y ← Abs ( Y2 Y1 ) Delta ← ( Delta Y x 2 ) - Delta X A inc ← ( Delta Y Delta X ) x 2 B inc ← Delta Y x 2 J ← Y1 Afficher Pixel ( X1, Y1 ), Couleur I ← X1 + 1 BOUCLE FAIRE TANT QUE I ≤ X2 SI Delta ≥ 0 ALORS J ← J + Direction Incrémentation Delta ← Delta + A inc SINON Delta ← Delta + B inc FIN SI Afficher Pixel ( I, J ), Couleur I ← I + 1 FIN SI FIN SI FIN SI |
Mode 320x200 pixels en 256 couleurs
Ce mode désigne sur les IBM PC, un affichage de 320 pixels horizontal et de 200 pixels vertical sur un choix de 256 couleurs modifiable sur une palette de 262 144 couleurs. Ce mode n'est disponible qu'à partir des cartes VGA ou supérieur par l'intermédiaire de l'INTERRUPTION 10h avec le mode 13h. L'algorithme pouvant s'appliquer pour modifier un pixel de se mode vidéo est le suivant :
Segment A000h : X + Y x 320 ← Couleur du Pixel |