Comparaison du contenu de 2 tableaux de bytes.

Signaler
Messages postés
8
Date d'inscription
mercredi 3 février 2010
Statut
Membre
Dernière intervention
20 mai 2010
-
Messages postés
326
Date d'inscription
vendredi 23 décembre 2005
Statut
Membre
Dernière intervention
8 février 2011
-
Bonjours, je suis débutant dans le domaine. Voici mon problème :
Je suis sur XNA, une je dois, sous l'effet d'un clique sur un sprite " bouton valider ", lancer une méthode pour comparer le contenue de 2 tableaux à deux dimensions qui ont été préalablement à partir de deux fichier image .bmp.

Voici les deux tableaux :
------------------------------------------------------------------------
*Dans ma classe principale du projet :*

//FR : Déclaration des tableaux de bytes acceuillant les chaînes d'octets
// des images (250*250)

byte[,] tab1= new byte[250, 250];
byte[,] tab2= new byte[250, 250];

//FR : Gestion du bouton valider, qui lance la méthode de "CompareTableau"

if (MState.LeftButton == ButtonState.Pressed)
buttonValider.CompareTableau(MState, tab1, tab2);

---------------------------------------------------------------------------

*Dans ma classe "sprite" *

//FR : Condition de la présence du curseur de la souris sur le sprite //bouton Valider.

if (MState.X >= position.X && MState.X <= (position.X + texture.Width) &&
MState.Y >= position.Y && MState.Y <= (position.Y + texture.Height))
{

* CODE de comparaison de tableau *
}

Le but est donc d'indiquer suite à cette comparaison si le contenue case par case et similaire, si oui il sera question d'une gestion particulière par la suite, sinon la partie continue.
Si je ne suis pas très clair, il suffit juste de me le dire gentillement :)
A voir également:

3 réponses

Messages postés
326
Date d'inscription
vendredi 23 décembre 2005
Statut
Membre
Dernière intervention
8 février 2011
13
for(int i = 0; i < tab1.Length; i++)
{
    for(int j = 0; j < tab1.Length; j++)
    {
        if(tab1[i, j] != tab2[i, j])
            return false;
    }
}
return true;

Si les deux dimensions de ton tableau sont différentes, pense à adapter.

---
Généralement le bug se situe entre le clavier et la chaise.
Le temps est une "chose" introuvable dont l'existence ne fait aucun doute.
Messages postés
8
Date d'inscription
mercredi 3 février 2010
Statut
Membre
Dernière intervention
20 mai 2010

Merci, ca peut paraître simple, mais pour moi pas trop :) j'ai trouvé la même solution sauf qu'après le résultat de la comparaison je modifie un booléen initialisé à false, qui passe à true si les deux tableaux sont similaires :) Par contre il y a un autre petit problème.
Etant donné que le fichier inséré dans les tableaux sont de type .bmp, les premiers éléments du fichier forment l'en tête de l'image avec toutes les caractéristiques de l'image, sa taille etc.... et s'étend jusqu'au 54èmes octets. Donc jusqu'au 53èmes du tableau. Or, je vais exercer des opérations par la suite pour modifier l'image (rotation etc...) donc il ne faut pas que l'en tête soit prise en compte. Quelle solution me permettrai de modifier le tableau mais seulement à partir de la 53èmes case ?
Faut t-il que je réinsère le tableau1 de l'image dans un nouveaux tableau2 en n'ayant supprimer au préalable les 54èmes premier octets de ce premier ?
Messages postés
326
Date d'inscription
vendredi 23 décembre 2005
Statut
Membre
Dernière intervention
8 février 2011
13
Il suffit de commencer à parcourir le tableau à partir de l'index voulu

const int begin = 44;
for(int i = begin; i < tab1.Length; i++)
{
    for(int j = begin; j < tab1.Length; j++)
    {
        if(tab1[i, j] != tab2[i, j])
            return false;
    }
}
return true;


---
Généralement le bug se situe entre le clavier et la chaise.
Le temps est une "chose" introuvable dont l'existence ne fait aucun doute.