Comparaison du contenu de 2 tableaux de bytes.

MrMexx Messages postés 8 Date d'inscription mercredi 3 février 2010 Statut Membre Dernière intervention 20 mai 2010 - 5 mai 2010 à 10:07
cs_GG29 Messages postés 326 Date d'inscription vendredi 23 décembre 2005 Statut Membre Dernière intervention 8 février 2011 - 5 mai 2010 à 22:13
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 :)

3 réponses

cs_GG29 Messages postés 326 Date d'inscription vendredi 23 décembre 2005 Statut Membre Dernière intervention 8 février 2011 17
5 mai 2010 à 14:34
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.
0
MrMexx Messages postés 8 Date d'inscription mercredi 3 février 2010 Statut Membre Dernière intervention 20 mai 2010
5 mai 2010 à 20:53
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 ?
0
cs_GG29 Messages postés 326 Date d'inscription vendredi 23 décembre 2005 Statut Membre Dernière intervention 8 février 2011 17
5 mai 2010 à 22: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.
0
Rejoignez-nous