Matrice zigzag

Soyez le premier à donner votre avis sur cette source.

Vue 10 058 fois - Téléchargée 449 fois

Description

Parcours d'une matrice en zig zag. Procédé utilisé lors de la compression JPEG.
Pour plus d'information sur la compression JPEG : http://fr.wikipedia.org/wiki/Norme_JPEG

Cette source permettra de mieux comprendre le procédé ZigZag.

Source / Exemple :


void _tmain(int argc, _TCHAR* argv[])
{
int i;
int j;
i = 0;
j = 0;

int maxI ;
int maxJ ;
maxI = 7;
maxJ = 7;

int croiss;
croiss = 0;

int Matrice[8][8];
Matrice[0][0]=16;
Matrice[0][1]=11;
Matrice[0][2]=10;
Matrice[0][3]=16;
Matrice[0][4]=24;
Matrice[0][5]=40;
Matrice[0][6]=51;
Matrice[0][7]=61;

Matrice[1][0]=12;
Matrice[1][1]=12;
Matrice[1][2]=14;
Matrice[1][3]=19;
Matrice[1][4]=26;
Matrice[1][5]=58;
Matrice[1][6]=60;
Matrice[1][7]=55;

Matrice[2][0]=14;
Matrice[2][1]=13;
Matrice[2][2]=16;
Matrice[2][3]=24;
Matrice[2][4]=40;
Matrice[2][5]=57;
Matrice[2][6]=69;
Matrice[2][7]=56;

Matrice[3][0]=14;
Matrice[3][1]=17;
Matrice[3][2]=22;
Matrice[3][3]=29;
Matrice[3][4]=51;
Matrice[3][5]=87;
Matrice[3][6]=80;
Matrice[3][7]=62;

Matrice[4][0]=18;
Matrice[4][1]=22;
Matrice[4][2]=37;
Matrice[4][3]=56;
Matrice[4][4]=68;
Matrice[4][5]=109;
Matrice[4][6]=103;
Matrice[4][7]=77;

Matrice[5][0]=24;
Matrice[5][1]=35;
Matrice[5][2]=55;
Matrice[5][3]=64;
Matrice[5][4]=81;
Matrice[5][5]=104;
Matrice[5][6]=113;
Matrice[5][7]=92;

Matrice[6][0]=49;
Matrice[6][1]=64;
Matrice[6][2]=78;
Matrice[6][3]=87;
Matrice[6][4]=103;
Matrice[6][5]=121;
Matrice[6][6]=120;
Matrice[6][7]=101;

Matrice[7][0]=72;
Matrice[7][1]=92;
Matrice[7][2]=95;
Matrice[7][3]=98;
Matrice[7][4]=112;
Matrice[7][5]=100;
Matrice[7][6]=103;
Matrice[7][7]=99;

while (i <= maxI && j <= maxJ)
{
    printf("%d \t",Matrice[i][j]);
    if (i == 0 || i == maxI) 
	{
        if (j == maxJ) 
		{
            j = j - 1;
            i = i + 1;
		}
        j = j + 1;
        printf("%d \t",Matrice[i][j]);
	}
    else
	{
        if (j == 0 || j == maxJ) 
		{
            if (i == maxI) 
			{
                i = i - 1;
                j = j + 1;
			}
            i = i + 1;
            printf("%d \t",Matrice[i][j]);
		}
	}
        
		if (i == 0 || j == maxJ) { croiss = 0;}
		if (j == 0 || i == maxI)  { croiss = 1;}
    
    if (croiss==1) 
	{
        i = i - 1;
        j = j + 1;
	}
	else
	{
        i = i + 1;
        j = j - 1;
	}

}

}

Conclusion :


Ce code peut être amélioré :)

Codes Sources

A voir également

Ajouter un commentaire Commentaires
comment fair l inverce ?
Messages postés
1054
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
6
Ce n'est pas si dure que cela, on travaille sur des blocs 8x8 et on applique la bonne transformation DCT. Il suffirait alors de supprimer tous les éléments qui sont inférieur à un seuil et d'appliquer ta méthode un peu modifié pour obtenir une compression JPEG...
A+
Messages postés
1
Date d'inscription
mardi 21 novembre 2000
Statut
Membre
Dernière intervention
10 avril 2009

Salut,

Tu as raison le code de la DCT, est pas si simple à faire.
J'espère que la communauté y arrivera.

A bientôt.
Messages postés
1054
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
6
Salut
Il aurait été intéressant d'avoir le code de la DCT en plus de ce code...
Bonne continuation

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.