with JPG, GAda.Graphics, Gada.Plus ;
procedure Mission2 is
package Gr renames GAda.Graphics ;
procedure Afficher_Image(Img : JPG.T_Image ; X,Y : Integer) is
Haut : Integer := Img'Length(1) ;
begin
for Ligne in Img'Range(1) loop
for Colonne in Img'Range(2) loop
Gr.ColorPoint(X + Colonne, Y + Haut - 1 - Ligne,
Img(Ligne, Colonne)) ;
end loop ;
end loop ;
end Afficher_Image ;
type T_Traitement is (Negatif, Filtre_Rouge, Noir_Blanc) ;
procedure Afficher_Traitement(Img : JPG.T_Image ; X,Y : Integer ; Trait : T_Traitement) is
Haut : Integer := Img'Length(1) ;
Couleur_Originale : Gr.T_Couleur ;
Couleur_Traitee : Gr.T_Couleur ;
begin
for Ligne in Img'Range(1) loop
for Colonne in Img'Range(2) loop
Couleur_Originale := Img(Ligne, Colonne) ;
case Trait is
when Negatif =>
Couleur_Traitee.Rouge := 255 - Couleur_Originale.Rouge ;
Couleur_Traitee.Bleu := 255 - Couleur_Originale.Bleu ;
Couleur_Traitee.Vert := 255 - Couleur_Originale.Vert ;
when Filtre_Rouge =>
Couleur_Traitee.Bleu := 0 ;
Couleur_Traitee.Vert := 0 ;
Couleur_Traitee.Rouge := Couleur_Originale.Rouge ;
when Noir_Blanc =>
Couleur_Traitee.Rouge := (Couleur_Originale.Rouge + Couleur_Originale.Vert +
Couleur_Originale.Bleu) / 3 ;
Couleur_Traitee.Bleu := Couleur_Traitee.Rouge ;
Couleur_Traitee.Vert := Couleur_Traitee.Rouge ;
end case ;
Gr.ColorPoint(X + Colonne, Y + Haut - 1 - Ligne, Couleur_Traitee) ;
end loop ;
end loop ;
end Afficher_Traitement ;
procedure Tester_Afficher_Image(Nom_Image : String) is
Image : JPG.T_Image := JPG.Lire_Image(Nom_Image) ;
Largeur, Hauteur : Integer ;
begin
Hauteur := Image'Length(1) ;
Largeur := Image'Length(2) ;
Gr.Resize(2 * Largeur, 2 * Hauteur) ;
Afficher_Image(Image, 0, 0) ;
Afficher_Traitement(Image, Largeur, 0, Negatif) ;
Afficher_Traitement(Image, 0, Hauteur, Filtre_Rouge) ;
Afficher_Traitement(Image, Largeur, Hauteur, Noir_Blanc) ;
end Tester_Afficher_Image ;
begin
Tester_Afficher_Image(Gada.Plus.Choisir_Fichier) ;
end Mission2 ;