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

XNA/Monogame Discussion :

Vérifier la transparence d'un pixel


Sujet :

XNA/Monogame

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 14
    Points : 7
    Points
    7
    Par défaut Vérifier la transparence d'un pixel
    Bonjour,
    Je débute dans la programmation sur xna et je voudrais vérifier si certains pixels sont transparents en fonction de leurs coordonnées.
    Je bloque sur ce point pouvez-vous m'aidez et m'expliquer clairement la démarche à suivre ?
    En vous remerciant,
    Cdlt,
    Maxous.

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    Je ne vois pas comment récupérer la valeur alpha d'un pixel précis sur la map.
    Merci,
    Cdlt,
    Maxous.

  3. #3
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2002
    Messages : 255
    Points : 445
    Points
    445
    Par défaut
    Salut maxous77,

    Pas sûr que c'est le meilleur (le plus rapide) moyen de le faire
    mais essaie ça (profil Hidef exigé pour 4.0):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Color[] ColorData;//global
    Vector2 Pos = Vector2.Zero;//global
    ColorData=new Color[graphics.PreferredBackBufferHeight*graphics.PreferredBackBufferWidth];//loadcontent
    graphicsDevice.GetBackBufferData<Color>(ColorData);
    byte PixelAlpha = ColorData[(int)(Pos.X * Pos.Y)].A;
    Dans l'exemple on teste le pixel 0,0 .
    On peut l'utiliser pour savoir si la souris traverse une certaine zone etc...
    Pour des raisons de perfs il vaut mieux ne pas faire l'appel dans Draw systématiquement mais dans des circonstances particulières.

    Salutations.

  4. #4
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2002
    Messages : 255
    Points : 445
    Points
    445
    Par défaut
    Salut maxous77,

    Je pense que ceci est plus performant pour un seul pixel:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ColorData = new Color[1];
    Rectangle RectangleData = new Rectangle((int)Pos.X, (int)Pos.Y, 1, 1);
    graphicsDevice.GetBackBufferData<Color>(RectangleData,ColorData, 0, 1);
    byte PixelAlpha = ColorData[0].A;
    Salutations.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    Merci, de ta réponse, je vais essayé, est-ce que cela fonctionne sur XNA 3.1?

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    Je fais comment pour vérifier si la valeur alpha du pixel est inférieur à 150 par exemple?
    Pourrais-tu me donner la signification de tes dernières lignes, je comprends par bien tes déclarations.

    Merci,
    CDLT,
    maxous.

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    Le GetBackBufferData ne passe pas: " 'Microsoft.Xna.Framework.Graphics.GraphicsDevice' ne contient pas une définition pour 'GetBackBufferData' et aucune méthode d'extension 'GetBackBufferData' acceptant un premier argument de type 'Microsoft.Xna.Framework.Graphics.GraphicsDevice' n'a été trouvée (une directive using ou une référence d'assembly est-elle manquante*?)

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    Quand je dis que je souhaite vérifier si un pixel est transparent sur la map, c'est en réalité les pixels sur mon image PNG, mon foreground qui fait office de fond, pour vérifier si il y a collision ou non.
    Pouvez-vous m'expliquer dans le détails la marche à suivre car je suis perdu pour la gestion des pixels(couleurs,alpha...).

    Merci,
    CDLT,
    maxous.

  9. #9
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2002
    Messages : 255
    Points : 445
    Points
    445
    Par défaut
    Salut maxous77,

    Comme avec d'autres posts il faut que vous ayez les bases C#, xna et VS.

    Tu me demandes comment vérifier si la valeur alpha est inférieure à 150: if PixelAlpha < 150...

    Pour la signification des dernières lignes il te faut un bon livre xna et ce sera du gâteau.

    Le code fonctionne pour xna 4.0 donc cela génère des erreurs avec xna 3.1. Mais je pense qu'il vaut mieux passer au 4.0 que de chercher à adapter les codes au 1.0.

    Pour ton PNG (2 modifs):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Texture2D Buffer = Content.Load<Texture2D>("MonPNG");
    Buffer.GetData<Color>(0,RectangleData, ColorData, 0, 1);
    Salutations.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Lazarus] [Linux] Vérifier la couleur d'un pixel sans lag
    Par higishi dans le forum Lazarus
    Réponses: 5
    Dernier message: 30/04/2012, 20h01
  2. Pixels transparents d'une image
    Par lisco dans le forum Qt
    Réponses: 5
    Dernier message: 03/06/2009, 14h59
  3. Rendre transparent des pixels
    Par rambc dans le forum Calcul scientifique
    Réponses: 2
    Dernier message: 29/04/2009, 23h49
  4. Rendre un pixel semi-transparent
    Par Electroniktor dans le forum OpenCV
    Réponses: 4
    Dernier message: 11/07/2008, 10h23
  5. Transparence de pixel
    Par Selkione dans le forum SDL
    Réponses: 8
    Dernier message: 07/09/2006, 15h17

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