1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
| PROGRAM Couleurs_Approchees; // Echelle linaire
USES Crt, E_Texte, U_Math, U_Copie_1F_ter, Math;
CONST Chemin = 'D:\Virtual_Pascal\Fichiers_VP\Z_Modif_Im\Coul_App\';
M1 = 255;
TYPE Tab_3x3x3P = ARRAY[0..3] OF ARRAY[0..3] OF ARRAY[0..3] OF Pixel;
VAR Palette: Tab_3x3x3P;
(*HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
Calcul de chaque pixel de la nouvelle image
en fonction de celui de l'ancienne
Echelle linaire
HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH*)
PROCEDURE Calc_Mat_Im2_B(La, Ha: Z_32; VAR Ma1, Ma2: Tab_Pix);
VAR i: Byte; Xm, Ym: Z_32; w: Reel; Px, Px1: Pixel;
BEGIN
FOR Xm:= 0 TO (La - 1) DO
FOR Ym:= 0 TO (Ha - 1) DO
BEGIN
Px:= Ma1[Xm, Ym];
FOR i:= 1 TO 3 DO // w:= Sqr(Px[i] / M1); Px1[i]:= Round(3 * w)
BEGIN
w:= Px[i] / M1; Px1[i]:= Round(3 * w)
END;
Ma2[Xm,Ym]:= Palette[Px1[1]][Px1[2]][Px1[3]]
END
END;
PROCEDURE Calc_Mat_Im2_A(La, Ha: Z_32; VAR Ma1, Ma2: Tab_Pix);
VAR I1, I2, I3: Word; Carreau, Limite, Xm, Ym: Z_32;
BEGIN
Limite:= La DIV 2; Carreau:= La DIV 8; // Carreau = 50
FOR Xm:= 0 TO (La - 1) DO
FOR Ym:= 0 TO (Ha - 1) DO
BEGIN
IF (Xm<Limite) THEN IF (Ym<Limite) THEN I1:= 0
ELSE I1:= 2
ELSE IF (Ym<Limite) THEN I1:= 1
ELSE I1:= 3;
I2:= (Xm DIV Carreau) MOD 4;
I3:= (ym DIV Carreau) MOD 4;
Ma2[Xm,Ym]:= Palette[I1][I2][I3]
END
END;
PROCEDURE Init_P(VAR Pal_: Tab_3x3x3P); // C3 = 85 ; C4 = 21675 = (255^2)/3
CONST C3 = M1 DIV 3; // C4 = M1 * C3;
VAR I1, I2, I3: Byte; Px: Pixel;
BEGIN
FOR I1:= 0 TO 3 DO
BEGIN
Px[1]:= Round(C3 * I1); // Px[1]:= Round(Sqrt(C4 * I1));
FOR I2:= 0 TO 3 DO
BEGIN
Px[2]:= Round(C3 * I2); // Px[2]:= Round(Sqrt(C4 * I2));
FOR I3:= 0 TO 3 DO
BEGIN
Px[3]:= Round(C3 * I3); // Px[3]:= Round(Sqrt(C4 * I3));
Pal_[I1][I2][I3]:= Px
END
END
END
END;
(*HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
Programme principal
HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH*)
BEGIN
Copie_F1(Chemin + 'Doss_1\F_1_A');
Init_P(Palette);
Calc_Mat_Im2_A(Larg_Image, Haut_Image, Matrice_1, Matrice_2);
Creation_F2(Chemin + 'Doss_2\F_2_A');
Copie_F1(Chemin + 'Doss_1\F_1_B');
Calc_Mat_Im2_B(Larg_Image, Haut_Image, Matrice_1, Matrice_2);
Creation_F2(Chemin + 'Doss_2\F_2_B'); A_;
END. |
Partager