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 :

[Graphique] Superposer 2 images


Sujet :

2D Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 8
    Points : 7
    Points
    7
    Par défaut [Graphique] Superposer 2 images
    Bonjour,

    J'essaye d'ecrire une methode qui retourne une instance d'un BufferedImage representant la superposition de 2 images.
    Pour cela, dans un premier temps j'essaye seulement de rendre une image transparente.
    Apres quelques recherches sur ce forum j'ai vu qu'on pouvait gerer la transparence à partir d'un alphaComposite, mais j'ai essayé de faire une methode et ca ne marche pas.

    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public BufferedImage createComposite(BufferedImage image, float alpha)
            {
                    Graphics2D g2=image.createGraphics();
                    Composite newComposite =                                               AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha);
     
                    g2.setComposite(newComposite);
                    g2.drawImage(image, null, null);
                    return image;
            }
    Toute aide sera la bienvue !! merci :-)

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Tu sais si tu composes une image opaque sur elle-même quel que soit le niveau de transparence de la composite tu ne verras rien de neuf au niveau du résultat : ça aura toujours la même gueule que l'image d'origine (tu peux faire l'expérience toi-même dans un logiciel de dessin supportant une gestion par calques).

    Faudrai plutot faire ça dans une nouvelle image (de type INT_ARGB) dont la couleur de fond aura été préalablement mis à la couleur transparente.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Hop :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public BufferedImage createComposite(BufferedImage image, float alpha)
            {
                    BufferedImage buffer = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_ARGB);
                    Graphics2D g2=buffer.createGraphics();
                    Composite newComposite =                                               AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha);
     
                    g2.setComposite(newComposite);
                    g2.drawImage(image, null, null);
                    g2.dispose();
     
                    return buffer;
            }
    Et pour superposer deux images :

    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
    public BufferedImage createComposite(BufferedImage image1, BufferedImage image2, float alpha)
            {
                    BufferedImage buffer = new BufferedImage(Math.max(image1.getWidth(), image2.getWidth()),
                          Math.max(image1.getHeight(), image2.getHeight()),
                          BufferedImage.TYPE_INT_ARGB);
                    Graphics2D g2=buffer.createGraphics();
     
                    g2.drawImage(image1, null, null);
                    Composite newComposite =                                               
    AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha);
     
                    g2.setComposite(newComposite);
                    g2.drawImage(image2, null, null);
                    g2.dispose();
     
                    return buffer;
            }
    Romain Guy
    Android - Mon livre - Mon blog

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    Nikel !! ca marche :-) merci !!

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 109
    Points : 70
    Points
    70
    Par défaut
    Bonjour, je remonte ce sujet car j'essaie de réaliser la superposition de 2 image comme indiqué ci-dessus cependant, j'aimerai également rendre une image verte à l'aide de mon ColorModel mais cette image reste en niveau de gris.

    Voici le code de mon colorModel et de mon createComposite :

    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
     
    /**
             * Crée un ColorModel permettant de mettre l'ensemble des pixels
             * en nuance de vert.
             * @return
             */
    	private ColorModel createColorModel() {
    		int nbBits = 8;
    		//int val = new Double( Math.pow( 2, nbBits ) ).intValue();
    		int val = 1 << nbBits;
     
    		byte[] r = new byte[ val ];
    		byte[] g = new byte[ val ];
    		byte[] b = new byte[ val ];
     
    		for (int i = 0; i < r.length; i++) {
    			r[i] = (byte) 0;
    			g[i] = (byte) i;
    			b[i] = (byte) 0;
    		}
    		return new IndexColorModel( nbBits, val, r, g, b );
    	}
     
    public void createComposite( float alpha )
    	{
     
    		BufferedImage buffer = new BufferedImage( Math.max( imgTimbre.getWidth(), imgSubstrat.getWidth() ),
    								Math.max(imgTimbre.getHeight(), imgSubstrat.getHeight()),
    								imgTimbre.getType() );
    		Graphics2D g2 = (Graphics2D) buffer.getGraphics();
     
    		g2.drawImage( imgSubstrat, null, null );
     
    		//Légère transparence
    		g2.setComposite( AlphaComposite.getInstance( AlphaComposite.SRC_OVER, alpha ) );
     
    		//Création d'une image en niveau de vert de la 2eme image
    		BufferedImage imageTimbreVerte = new BufferedImage( createColorModel(),
    													       imgTimbre.getRaster(),
    													       false,
    													       null );
     
    		g2.drawImage( imageTimbreVerte, null, null );
    		g2.dispose();
     
    		setImgFinaleSuperposition( buffer );
    	}
    Si vous comprenez pk je n'obtiens pas d'image verte mais 2 images en nivea de gris merci de m'expliquer.

    Roulian

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

Discussions similaires

  1. Superposer une image avec un graphique
    Par mathilde_b dans le forum Images
    Réponses: 1
    Dernier message: 13/02/2007, 10h42
  2. Superposer 2 images dont une transparente
    Par FloMo dans le forum 2D
    Réponses: 3
    Dernier message: 01/12/2005, 18h12
  3. Superposer 2 images
    Par Qapoka dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 27/11/2005, 17h58
  4. superposer deux images ?
    Par terminoz dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 20/08/2005, 09h04
  5. Réponses: 6
    Dernier message: 29/07/2005, 11h12

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