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 :

[Java2D]Couleur de transparence


Sujet :

2D Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2002
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 194
    Par défaut [Java2D]Couleur de transparence
    Dans un panel je souhaite dessiner tout un tas d'element : images, forme, texte, etc...
    Je souhaiterais savoir comment je peux définir une couleur de transparence pour l'ensemble de mon panel. Pour que par exemple si je définit le rouge comme couleur de transparence, toutes les éléments en rouge de mon panel apparaissent en transparent.
    J'imagine qu'il faut appeler un méthode sur l'objet graphics de mon panel mais je ne sais pas laquelle... merci d'avance pour votre aide !

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 137
    Par défaut
    Tiens, un lien intéressant pour toi :
    http://www.apl.jhu.edu/~hall/java/Java2D-Tutorial.html#Java2D-Tutorial-Transparency

    Et leur exemple ( je l'ai juste un peu raccourci :-) ):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
     
     
     
     
    public class TransparencyExample extends JPanel 
    {
      private static int gap=10, width=60, offset=20,
                         deltaX=gap+width+offset;
     
     
      private Rectangle
        blueSquare = new Rectangle(gap+offset, gap+offset, width, width),
        redSquare = new Rectangle(gap, gap, width, width);
     
     
      private AlphaComposite makeComposite(float alpha) {
        int type = AlphaComposite.SRC_OVER;
        return(AlphaComposite.getInstance(type, alpha));
      }
     
      private void drawSquares(Graphics2D g2d, float alpha) {
        Composite originalComposite = g2d.getComposite();
        g2d.setPaint(Color.blue);
        g2d.fill(blueSquare);
        g2d.setComposite(makeComposite(alpha));
        g2d.setPaint(Color.red);
        g2d.fill(redSquare);
        g2d.setComposite(originalComposite);
      }
     
      public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D)g;
        for(int i=0; i<11; i++) {
          drawSquares(g2d, i*0.1F);
          g2d.translate(deltaX, 0);
        }
      }
     
     
     
      static public JFrame createFrame( JPanel content, int width, int height )
      {
        JFrame frame = new JFrame("Title");
     
        frame.setBackground( Color.lightGray );
        content.setBackground( Color.lightGray );
     
        frame.setSize( width, height );
     
        frame.setContentPane(content);
     
        frame.addWindowListener(new WindowAdapter()
        {
        public void windowClosing(WindowEvent event) {
          System.exit(0);
        }
        });
     
     
        frame.setVisible(true);
        return(frame);
      }
     
      public static void main(String[] args) 
      {
     
        JFrame frame = createFrame( 
          new TransparencyExample() ,
          11*deltaX + 2*gap, deltaX + 3*gap 
          );
     
     
        frame.setVisible( true);
     
     
      }
    }

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2002
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 194
    Par défaut
    merci de ton aide, je connaissais ce tutoriel.
    il marche effectivement bien lorsque je dessine des forme dans mon panel (méthodes fillxxx) mais ca ne marche plus lorsque j'affiche des images.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 137
    Par défaut
    Mais si tu as une Image, tu dois avoir accès à son objet Graphics, et du coup, tu peux faire comme pour au-dessus, non ?

  5. #5
    Membre confirmé
    Inscrit en
    Juillet 2002
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 194
    Par défaut
    et comment je définit ma couleur de transparence ??
    le setPaint fonctionne pour les fillxxx mais pas pour les drawImage.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 137
    Par défaut
    Je pense qu'il faut d'abord dessiner l'image, puis dessiner un rectangle de couleur rouge transparent...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Graphics2D g2d = ...
     
    Composite originalComposite = g2d.getComposite(); 
     
    g2d.drawImage( tonImage, 0, 0, null );
     
    g2d.setComposite(makeComposite(alpha));
    g2d.setPaint(Color.red);
    g2d.fillRect( 0, 0 , tonImage.getWidth(), tonImage.getHeight() );
     
    g2d.setComposite(originalComposite);

  7. #7
    Gfx
    Gfx est déconnecté
    Expert confirmé
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    Il faut utiliser un AlphaComposite pour faire ce que tu veux. Cela risque d'etre un peu plus complique que ca si j'ai bien compris ce que tu veux faire mais tu devrais pouvoir y arriver.

  8. #8
    Membre confirmé
    Inscrit en
    Juillet 2002
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 194
    Par défaut
    Citation Envoyé par thomas_strass
    Je pense qu'il faut d'abord dessiner l'image, puis dessiner un rectangle de couleur rouge transparent...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Graphics2D g2d = ...
     
    Composite originalComposite = g2d.getComposite(); 
     
    g2d.drawImage( tonImage, 0, 0, null );
     
    g2d.setComposite(makeComposite(alpha));
    g2d.setPaint(Color.red);
    g2d.fillRect( 0, 0 , tonImage.getWidth(), tonImage.getHeight() );
     
    g2d.setComposite(originalComposite);
    Ca ne marche pas mieux malheureusement.

    GFX -> j'essaye justement d'utiliser un AlphaComposite mais avec toutes les combinaisons possibles (SRC_IN, SRC_OVER, SRC_OUT, DST_IN, etc...) j'avoue que j'ai un peu de mal.
    Tu n'aurais pas une idée ?

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 137
    Par défaut
    Petit article de Sun :
    http://java.sun.com/products/jfc/tsc/articles/swing2d/

    regarde la partie "Translucency", l'exemple, c'est pas ce que tu veux faire ?

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 137
    Par défaut
    oups, je viens de regarder de nouveau ton post initial...

    tu veux remplacer par exemple la couleur rouge d'une image par une autre couleur rouge, mais transparente cette fois-ci ?

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 137
    Par défaut
    Pour filtrer les couleurs dans un objet image :
    http://javaalmanac.com/egs/java.awt.image/FilterRgb.html

  12. #12
    Membre confirmé
    Inscrit en
    Juillet 2002
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 194
    Par défaut
    Citation Envoyé par thomas_strass
    Pour filtrer les couleurs dans un objet image :
    http://javaalmanac.com/egs/java.awt.image/FilterRgb.html
    Ce code ne fonctionne pas chez moi (l'image est vide), même en faisant un copier/coller du code qu'il donne

Discussions similaires

  1. Réponses: 28
    Dernier message: 29/12/2011, 19h24
  2. PictureBox + Couleur de transparence
    Par Revelc dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 19/02/2008, 07h38
  3. "Merger" deux images avec une couleur de transparence
    Par MaelstroeM dans le forum VB.NET
    Réponses: 7
    Dernier message: 14/09/2007, 09h34
  4. Couleur de transparence pour curseur de souris
    Par womannosky dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 20/05/2007, 19h26
  5. Réponses: 7
    Dernier message: 04/06/2006, 12h24

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