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 :

[Graphics2d] Problème de précision ou de transparence


Sujet :

2D Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2003
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 21
    Par défaut [Graphics2d] Problème de précision ou de transparence
    Bonjour,

    Mon problème apparait lorsqu'on active l'Antialiasing avec graphics2d. Si je trace une ligne noire et qu'ensuite je la repasse en blanc. Il reste toujours une légère trace que je souhaite éliminer. Comment faire pour supprimer cela?

    Voici une classe prête à compiler qui explique bien la chose:

    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
     
    import javax.swing.*;
    import java.awt.*;
    import java.awt.image.*;
    import java.awt.event.*;
     
    public class Test extends JFrame implements ActionListener{
    	BufferedImage image=null;
    	JPanel panneau=null;
    	JButton blanc=new JButton("Tracer une ligne blanche");
    	JButton noir=new JButton("Tracer une ligne noire");
     
    	Test(){
     
    		noir.setPreferredSize(new Dimension(200,50));
    		blanc.setPreferredSize(new Dimension(200,50));
    		image=new BufferedImage(100,100,BufferedImage.TYPE_INT_RGB);
    		Graphics g=image.getGraphics();
    		g.setColor(Color.white);
    		g.fillRect(0,0,100,100);
    		panneau=new JPanel()
    		{	public void paint(Graphics g){
    				super.paint(g);
    				g.drawImage(image,0,0,this);
    			}
    		};
    		panneau.setPreferredSize(new Dimension(100,100));
    		getContentPane().setLayout(new BorderLayout());
    		getContentPane().add(noir,BorderLayout.NORTH);
    		getContentPane().add(blanc,BorderLayout.SOUTH);
    		getContentPane().add(panneau,BorderLayout.CENTER);
    		noir.addActionListener(this);
    		blanc.addActionListener(this);
    		blanc.setActionCommand("blanc");
    		noir.setActionCommand("noir");
    		this.pack();
    		this.setTitle("Ceci est un test");
    		this.setVisible(true);
    	}
    	public void actionPerformed(ActionEvent e){
    		Graphics2D g2d=(Graphics2D)(image.getGraphics());
    		g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
    		Graphics g=panneau.getGraphics();
    		String cmd=e.getActionCommand();
    		if (cmd.equals("blanc")){
    			g2d.setColor(Color.WHITE);
    		}
    		else {
    			g2d.setColor(Color.BLACK);
    		}
    		g2d.drawLine(0,0,100,100);
    		g.drawImage(image,0,0,this);
     
    	}
    	protected void processWindowEvent(WindowEvent e) {
    		if (e.getID() == WindowEvent.WINDOW_CLOSING) System.exit(0);
    	}
    	static public void main(String[] args){
    		new Test();
    	}
    }
    [ Sujet déplacé depuis le forum java par Viena ]
    Les Règles du Forum

  2. #2
    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
    Essaye d'activer les fractional metrics dans les rendering hints du Graphics2D.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2003
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 21
    Par défaut
    J'ai rajouté la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    		g2d.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS,RenderingHints.VALUE_FRACTIONALMETRICS_ON);
    Rien ne change. J'ai déjà essayé de bidouiller avec les autres clés, les activer, les désactiver... Le problème reste toujours le même. Il semblerait qu'en Antialiasing, il fasse un ratio entre la couleur demandée , la couleur existante et le taux de recouvrement du pixel. (appuyer plusieurs fois sur ligne blanche atténue la teinte du tracé noir restant)

    Je reste à l'écoute...

  4. #4
    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
    Tu dois pouvoir contourner le probleme en utilisant un AlphaComposite avec la strategie adaptee.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2003
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 21
    Par défaut
    C'est ce que je suis en train d'essayer mais je n'arrive pas à obtenir l'effet voulue. J'ai essayer SRC_OVER, SRC_IN, SRC_ATOP, SRC avec une transparence de 1.0f mais cela ne change rien.

    Aie aie aie!

Discussions similaires

  1. Problème de précision dans une requête
    Par Le Pharaon dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 09/08/2006, 14h16
  2. Réponses: 5
    Dernier message: 11/05/2006, 08h51
  3. Problème de précision avec FloatToStr
    Par Clorish dans le forum Langage
    Réponses: 9
    Dernier message: 06/12/2005, 15h38
  4. [C#]Problème sur composant perso (Bouton Transparent)
    Par SLE dans le forum Windows Forms
    Réponses: 1
    Dernier message: 06/10/2005, 00h12
  5. [FLASH MX] Problème de "précision"
    Par will-scs dans le forum Flash
    Réponses: 2
    Dernier message: 03/07/2005, 00h31

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