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

2D Java Discussion :

Utiliser Deux BufferImage (appliquer l'un sur l'autre)


Sujet :

2D Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 79
    Par défaut Utiliser Deux BufferImage (appliquer l'un sur l'autre)
    Bonjour,
    J'ai deux BufferImage:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    BufferedImage image_static=new BufferedImage(2048,2048,BufferedImage.TYPE_INT_ARGB);
    BufferedImage image_dynamic=new BufferedImage(2048,2048,BufferedImage.TYPE_INT_ARGB);
     
    g.drawImage(image_dynamic, 0, 0, this);
    g.drawImage(image_static, 0, 0, this);
    Le problème est que seul le dernier buffer donné à g.drawImage apparait. Alors que je voudrais la composition des deux. Mais je ne vois pas du tout comment faire. Une piste svp ?

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 44
    Par défaut
    Je pense qu'il faut jouer sur la couche "Alpha" qui gère la transparence.

    bufferedImage.setRGB(i, j, 0xff000000)

    -> positionne un point noir en (i, j) qui sera copié en destination

    bufferedImage.setRGB(i, j, 0x00000000)

    -> positionne un point noir en (i, j) qui ne sera pas copié en destination (pixel transparent)

    J'espère avoir bien compris moi meme comment cela marche

  3. #3
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    En passant par la transparence...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    Graphics2D g2d = (Graphics2D) g;
    BufferedImage image_static=new BufferedImage(2048,2048,BufferedImage.TYPE_INT_ARGB);
    BufferedImage image_dynamic=new BufferedImage(2048,2048,BufferedImage.TYPE_INT_ARGB);
     
    g2d.drawImage(image_dynamic, 0, 0, this);
    //utilisation de transparence...
    g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER,0.5f));
     
     
    g2d.drawImage(image_static, 0, 0, this);
    Sinon il te faut t'assurer que le fond de la deuxième BufferedImage est bien transparent (donc utiliser des png à la place de jpeg)

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 79
    Par défaut
    Après des recherches sur internet je suis arrivé au truc du composite.

    Le problème c'est mon buffer buffer_dynamic j'ai besoin de l'effacer à chaque que je le mes a jour. Donc je le remplissais d'un fond blanc. Ca m'évitait de faire un new BufferedImage qui prend du temps (vu la taille du buffer!).

    En le remplissant de blanc, mon buffer_dynamic perd son fond transparent !!!
    Quand je le colle sur le buffer_static, buffer_static est pale (et ce à cause du fond blanc).

    J'ai besoin d'effacer le buffer_dynamic mais sans le recréer, sans faire de new !
    Une idée ?

    Ya moyen peut etre de definir la couleur de transparence du buffer ?

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Par défaut
    Il faut effacer ton buffer avec du noir transparent, et non pas du blanc opaque.
    En d'autre termes, tu positionnes la règle AlphaComposite.SRC et la couleur new Color(0,0,0,0), avant de faire ton fillRect.

  6. #6
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Avant même çà, il y a un truc que j'ai zappé au niveau de ton code. Ton buffer dynamique doit affiché par dessus ou par dessous le buffer statique?

    Sinon pour effecer ton buffer sil suffit de dessiner dedans (méthode createGraphics de ton image puis un drawRectangle avec une couleur tranparente à mort)

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Par défaut
    Citation Envoyé par sinok Voir le message
    Sinon pour effecer ton buffer sil suffit de dessiner dedans (méthode createGraphics de ton image puis un drawRectangle avec une couleur tranparente à mort)
    Il faut positionner la règle SRC. Par défaut, le graphics sera créé avec la règle SRC_OVER. Et dessiner du transparent avec la règle SRC_OVER, ca ne fait rien.
    Attention également (je suppose que c'est une typo), c'est fillRect qu'il faut appeler et non pas drawRect.

Discussions similaires

  1. Matcher deux champs d'une table sur une autre
    Par lepotier dans le forum Développement
    Réponses: 2
    Dernier message: 14/12/2012, 10h33
  2. [PHP 5.0] Utiliser un fichier qui se trouve sur un autre domaine
    Par unix27 dans le forum Langage
    Réponses: 12
    Dernier message: 13/11/2011, 00h06
  3. deux structures pointant l'une sur l'autre
    Par mebibyte dans le forum Débuter
    Réponses: 3
    Dernier message: 23/03/2010, 09h43
  4. appliquer un panel sur un autre
    Par issam_ovic dans le forum Interfaces Graphiques en Java
    Réponses: 7
    Dernier message: 05/09/2009, 14h24
  5. Réponses: 1
    Dernier message: 13/07/2009, 21h05

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