IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Allegro Discussion :

Comparer 2 bmp


Sujet :

Allegro

  1. #1
    Membre régulier Avatar de Miyukaze
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2008
    Messages : 66
    Points : 83
    Points
    83
    Par défaut Comparer 2 bmp
    Bonjour à tous ^^
    Voilà je travaille sur un projet d'informatique pour mon école.
    J'ai un petit problème pour comparer 2 images bmp sous allegro. En fait j'aimerai arriver à faire que si les 2 images concordent (pixel par pixel) on quitte la boucle.

    J'ai essayé pixel par pixel mais je n'y arrive pas. Donc si vous avez des idées ou des conseils pour comparer les 2 images "globalement" ou pixel par pixel vous êtes bienvenus =)

  2. #2
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 021
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 021
    Points : 2 278
    Points
    2 278
    Par défaut
    Salut,
    comment as-tu essayé ? car il me semble que c'est le seul moyen.

    Le format BMP fait partie des plus simples et à priori tu n'as pas besoin d'allegro.
    La première chose à faire est de comparer tous les autres trucs dont les tests ne prennent pas beaucoup de temps : les dimensions, les bits, le format...
    Si tout coïncide, là tu peux lancer le test pixel à pixel qui consiste en 2 simples boucles imbriquées. Attention à l'ordre de parcours 2 images peuvent être semblables mais pas l'ordre de stockage RGB <-> BGR, dans cas tu peux faire une pré-passe pour convertir l'image plutôt que faire des tests avancés dans les 2 boucles imbriquées mais ce sera évidemment moins efficace.

    Je ne pense pas qu'il existe une fonction de comparaison de BMP dans Allegro mais tu peux te tourner vers les al_get_bitmap_xxx() pour traiter les informations du header ; faut également espérer que tu aies une fonction pour récupérer les données brutes de ton ALLEGRO_BITMAP, j'en ai pas vu dans la doc.

    (ceci peut t'aider si tu oublies Allegro : http://local.wasp.uwa.edu.au/~pbourke/dataformats/bmp/)

    [edit]Je ne me souvenais plus que le BMP gérait la compression, il serait effectivement plus simple que tu passes par une lib qui te permette de récupérer les données brutes, plutôt que de redévelopper un loader.

    Une autre solution, tu calcules et compares les CRC32 ou MD5 des données brutes.
    Vive les roues en pierre

  3. #3
    Membre régulier Avatar de Miyukaze
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2008
    Messages : 66
    Points : 83
    Points
    83
    Par défaut
    Coucou! En fait mes 2 images sont identiques en taille,forme etc... j'en ai une noire et blanche et l'autre noire et verte. en deplacant mon personnage sur les cases blanches elles deviennent vertes et donc j'aimerai mettre une condition de fin de niveau quand les 2 bmp correspondront parfaitement. a noté que comme je suis censé coder des ennemis qui eux changent le vert en blanc je ne peux pas me contenter d'une condition "si tpoutes les cases blanches ont été parcourues"

  4. #4
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 021
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 021
    Points : 2 278
    Points
    2 278
    Par défaut
    Dans ce cas je pense qu'il doit y avoir plus simple, par exemple, tenir un compteur de cases vertes. Si t'es en POO tu peux déclarer une classe Case avec un membre static nbCasesVertes que tu incrémentes/décrémentes à chaque appel de ta méthode changeImage() de ta classe Case.
    Si t'es pas en POO c'est le même principe, l'idée étant de connaître à tout moment le nombre de cases vertes.
    Vive les roues en pierre

  5. #5
    Membre régulier Avatar de Miyukaze
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2008
    Messages : 66
    Points : 83
    Points
    83
    Par défaut
    Désolé mais je débute =)

    POO= ?

    Sinon ouais j'avais bien pensé à ca mais du coup ca serait pas plus simple de compter le nombre de cases blanches et quand il n'y en a plus de mettre un break?
    Mais tester toutes les cases de la map à chaque tour de boucle va pas bouffer trop de mémoire?

  6. #6
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 021
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 021
    Points : 2 278
    Points
    2 278
    Par défaut
    POO = Programmation Oriéntée Objet

    Bin compter les vertes ou les blanches il me semble que ça revient au même (en fait ça dépend peut-être de tes structures de données).

    Tu vérifies pas à chaque loop, tu vérifies seulement quand tu changes d'image pour une case (mais c'est pareil, ça dépend de comment tu as codé cela). Mais même si tu vérifiais à chaque loop ce serait moins lourd que de comparer des BMP (excepté, peut-être, si tu compares les pointeurs).
    Vive les roues en pierre

  7. #7
    Membre expérimenté

    Profil pro
    Programmeur
    Inscrit en
    Août 2002
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Programmeur

    Informations forums :
    Inscription : Août 2002
    Messages : 1 091
    Points : 1 679
    Points
    1 679
    Par défaut
    Citation Envoyé par Miyukaze Voir le message
    Coucou! En fait mes 2 images sont identiques en taille,forme etc... j'en ai une noire et blanche et l'autre noire et verte. en deplacant mon personnage sur les cases blanches elles deviennent vertes et donc j'aimerai mettre une condition de fin de niveau quand les 2 bmp correspondront parfaitement. a noté que comme je suis censé coder des ennemis qui eux changent le vert en blanc je ne peux pas me contenter d'une condition "si tpoutes les cases blanches ont été parcourues"
    ouch c'est horriblement compliqué (comparer pixel par pixel) pour ce que tu veux faire :/

    Tu gardes juste un tableau de booléens : blanc/vert.

    Soit comme on t'a dit tu conserves un compteur nombre de cases blanches : au début il y n'y a que des cases blanches (disons 100). Lorsque tu convertis une case de blanc en vert tu décrémente le compteur. Lorsque un ennemi passe sur une case verte tu incrémentes le compteur (il faut donc que tu utilises le tableau de booléens pour savoir si la case courante était déjà blanche ou si elle était verte)

    Exemple des deux procédures en question :

    Deplacejoueur (position : x, y)
    si tableau(x,y) == blanc
    alors tableau(x,y) = vert; nombrecasesblanches --;

    Deplacemonstre (position : x, y)
    si tableau(x,y) == vert
    alors tableau(x,y) = blanc; nombrecasesblanches++;

    Au retour de ces fonctions tu testes si nombrecasesblanches == 0. Si c'est le cas tu as ta condition de victoire.

    Conseil : il faut vraiment que tu apprennes l'algorithmique de base et l'optimisation (optimisation = faire le même boulot avec le moins d'opérations possible ou en le moins de temps possible).

    LeGreg

    Mon site web | Mon blog | Mes photos | Groupe USA
    > BONJOUR, JE SUIS NOUVEAU SUR CE FORUM
    > presse la touche caps lock, stp
    > OH.. MERCI C EST BEAUCOUP PLUS FACILE COMME CA

  8. #8
    Membre régulier Avatar de Miyukaze
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2008
    Messages : 66
    Points : 83
    Points
    83
    Par défaut
    Oui je sais bien! Mais en fait on a bouffé tout le C en un petit mois et demi donc faut le temps de digérer =) La on commence l'UML ca nous aidera un peu à mieux structurer nos codes je pense. On commence à peine la POO.

    Pour répondre à Djakisback on a codé de telle manière que notre personnage avance que si la flèche est enfoncée donc le compteur comptera bien à chaque loop. Si j'ai bien compris me reste plus qu'à compter manuellement combien de cases blanches il y a au total dans ma map T_T
    Merci à tous en tout cas! SI ca vous idt je vous filerai le lien vers le résultat, projet à rendre mercredi *o*

  9. #9
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 021
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 021
    Points : 2 278
    Points
    2 278
    Par défaut
    Pour répondre à Djakisback on a codé de telle manière que notre personnage avance que si la flèche est enfoncée donc le compteur comptera bien à chaque loop.
    En fait ça change rien, tu n'as pas besoin de faire le test à chaque loop. Tu as sans doute quelque part une fonction qui te permet de changer l'image d'une case pour la passer de vert à blanc, et inversement ?
    C'est dans cette fonction qu'il faudrait incrémenter/décrémenter le compteur. Fonction que tu appelles pour le joueur mais aussi pour les ennemis.
    Puis au retour tester si le compteur == nbCasesDuNiveau. (ça t'évite justement d'avoir à reparcourir toutes les cases pour connaître leur état)
    C'est ce qu'explique également LeGreg.

    Et en général tu changes la valeur de la condition du while, plutôt que de mettre un break; mais dans pas mal de cas, ça revient au même.
    Vive les roues en pierre

  10. #10
    Membre régulier Avatar de Miyukaze
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2008
    Messages : 66
    Points : 83
    Points
    83
    Par défaut
    ah ouais j'avais pas pensé à incrémenter mon compteur de case quand je modifie la couleur =) c'est pas bete du tout et je me demande pourquoi j'y ai pas pensé tout seul vu l'évidence de la chose =)
    Merci à tous pour vos conseils =)

Discussions similaires

  1. [langage] Comparer Perl avec d'autres langages comme C ?
    Par Anonymous dans le forum Langage
    Réponses: 3
    Dernier message: 10/08/2002, 23h52
  2. [TP]Charger un fichier bmp
    Par flavien tetart dans le forum Turbo Pascal
    Réponses: 5
    Dernier message: 30/06/2002, 19h04
  3. Réponses: 2
    Dernier message: 30/05/2002, 10h19
  4. Création image BMP
    Par Anonymous dans le forum C
    Réponses: 2
    Dernier message: 25/04/2002, 16h04
  5. Comparer des fichiers de données : Quel Langage ?
    Par Anonymous dans le forum Langages de programmation
    Réponses: 6
    Dernier message: 24/04/2002, 22h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo