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 :

Opacité d'une image avec RescaleOp


Sujet :

2D Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 16
    Par défaut Opacité d'une image avec RescaleOp
    Bonjour,
    Je tente désespérément de pouvoir gérer l'opacité d'une image à l'aide de la classe RescaleOp. Je me suis basé sur l'exemple de Sun ( http://java.sun.com/docs/books/tutor...drawimage.html ).

    Je ne suis pas certain d'avoir tout compris leur code en réalité. Je ne comprend pas en quoi consiste le tableau de scales (Si j'ai bien compris, son dernier élément correspond à l'opacité désiré), ni le tableau de Offsets.

    De plus, le tableau de offsets n'est jamais initialisé? Je ne comprend pas vraiment l'utilité

    Dans l'exemple de Sun, il crée un tableau de 4 scales et 4 offsets. Lors de mes tests, j'ai été obligé de créer un tableau de 4 scales et 3 offsets, sinon j'avais droit à un beau plantage.

    Je vous montre donc la fonction que j'ai réalisé sencé me retourner un scaleOp applicable à mon image

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        public static RescaleOp setOpacity(float opacity)
        {
    //Si j'ai bien compris, 0.5f sera ma valeur d'opacité
            float[] scales = {1f,1f,1f,0.5f};
            float[] offsets = new float[3];
            RescaleOp rop = new RescaleOp(scales, offsets, null);
        	return rop; 	
        }
    Merci d'avance de votre aide

  2. #2
    Membre chevronné Avatar de ngpub
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Par défaut
    Je ne suis pas certain d'avoir tout compris de leur code en réalité. Je ne comprend pas en quoi consiste le tableau de scales, ni le tableau de Offsets.
    La javadoc donne les infos :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    //The pseudo code for the rescaling operation is as follows:
     
    for each pixel from Source object {
        for each band/component of the pixel {
            dstElement = (srcElement*scaleFactor) + offset
        }
    }

    le tableau de offsets n'est jamais initialisé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    float[] offsets = new float[4];
    //est équivalent à :
    float[] offsets = {0f, 0f, 0f, 0f};
    Je tente désespérément de pouvoir gérer l'opacité d'une image [...] j'ai été obligé de créer un tableau de 4 scales et 3 offsets, sinon j'avais droit à un beau plantage.
    Le BufferedImage que tu utilises a bien une couche alpha ?
    Fais-tu comme dans l'exemple une copie de l'image source vers un BufferedImage dont tu maitrise le type ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    BufferedImage img = ImageIO.read(imageSrc);
    int w = img.getWidth(null);
    int h = img.getHeight(null);
    bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
    Graphics g = bi.getGraphics();
    g.drawImage(img, 0, 0, null);

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 16
    Par défaut
    Bonjour,
    Je crois déjà mieux comprend le fonctionnement

    Je n'avais pas ces deux lignes la :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
    Graphics g = bi.getGraphics();
    Donc je comprend bien que je n'ai pas de couche alpha, mais si j'en rajoute une, mon image ne s'affiche plus...

    Si on exclue les rescaleOp, y a t-il un autre moyen de gérer l'opacité d'une image?

    Merci d'avance

  4. #4
    Membre chevronné Avatar de ngpub
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Par défaut
    Montre voir le code où tu ouvres et dupliques l'image avant de la traiter.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 16
    Par défaut
    Salut,
    Ici je charge l'image de base
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    private void loadFile()
    	{
    		try 
    		{
    			File fichier = new File(this.imageUrl);
    			this.image = ImageIO.read(fichier);
    		} 
    		//Si problème
    		catch (IOException e) 
    		{
    			e.printStackTrace();
    		}
    }
    Ici je dessine mon image
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    private Graphics2D drawImage(Graphics2D g2d)
    	{
    		RescaleOp op = Opacity.setOpacity(0.5f);
                    bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
                    Graphics2D g2d = bi.getGraphics();
    		g2d.drawImage(image, 0, 0,null);
    		return g2d;
    	}
    Et ici le code ou j'applique mon opacité au RescaleOp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    	public static RescaleOp setOpacity(float opacity)
        {
            float[] scales = {1f,1f,1f,opacity};
            float[] offsets = new float[4];
            RescaleOp rop = new RescaleOp(scales, offsets, null);
        	return rop; 	
        }
    J'ai réduit le code de ces fonctions avant de les afficher ici, parce que lors de l'affichage, je ne gère pas seulement l'opacité de l'image, mais aussi la rotaiton, son redimenssionement et l'application de filtre.

    Je crois que les autres transformations que je fais subir à l'image est en partie ce qui cause mes problèmes avec mon opacité.

    Merci d'avance pour le temps que vous passerez à y regarde

  6. #6
    Membre chevronné Avatar de ngpub
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Par défaut
    Je crois que les autres transformations que je fais subir à l'image est en partie ce qui cause mes problèmes.
    Effectivement ton code semble correct, que donne l'affichage quand tu désactives les autres transformations ?

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

Discussions similaires

  1. Recuperation de la taille d'une image avec la propriété SRC
    Par CDRIK dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 08/10/2004, 03h05
  2. [Image]Créer une image avec JAVA 1.1
    Par burno dans le forum 2D
    Réponses: 4
    Dernier message: 11/08/2004, 09h19
  3. Afficher une image avec swing
    Par arnonote dans le forum AWT/Swing
    Réponses: 11
    Dernier message: 07/08/2004, 12h10
  4. [Débutante] Création d'une image avec un composant
    Par gwendo dans le forum AWT/Swing
    Réponses: 9
    Dernier message: 09/07/2004, 09h58
  5. PL/SQL - Comment afficher une image avec HTP ?
    Par patmaba dans le forum PL/SQL
    Réponses: 2
    Dernier message: 08/07/2004, 09h28

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