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 :

Lisser une GradientPaint


Sujet :

2D Java

  1. #1
    Membre habitué Avatar de Pecose
    Homme Profil pro
    Batiment
    Inscrit en
    Février 2013
    Messages
    310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Batiment
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2013
    Messages : 310
    Points : 194
    Points
    194
    Par défaut Lisser une GradientPaint
    Bonjour tout le monde.

    Mon problème vient du fait que mes dégradés sont moche.
    Je voudrai bien savoir si il y a un moyen de ne pas avoir cette effet de pallier de couleur dans mes GradientPaint et RadialGradientPaint.
    Sachant que RenderingHints n'est pas une réponse à mon problème.

    Merci de votre aide.
    Des jours c'est facile, des jours c'est pas facile, mais c'est jamais le même jour.

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    C'est quoi que tu appelles palier de couleur au juste ? Une copie d'écran peut-être ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre habitué Avatar de Pecose
    Homme Profil pro
    Batiment
    Inscrit en
    Février 2013
    Messages
    310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Batiment
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2013
    Messages : 310
    Points : 194
    Points
    194
    Par défaut
    Nom : Capture d’écran 2014-10-29 à 15.29.04.png
Affichages : 413
Taille : 365,4 Ko

    Les ronds blancs ce sont des RadialGradientPaint et ont peut voir que le dégradé n'est pas propre.
    Je peut te montrer le résultat avec un simple GradientPaint mais c'est exactement la même chose.

    Nom : Capture d’écran 2014-10-29 à 15.45.07.png
Affichages : 423
Taille : 20,6 Ko

    Voila au cas ou.
    Et la la code est vraiment basique: dans mon Panel je créé un rectangle que j'affiche après avoir setPaint mon Graphics2D avec mon GradientPaint.
    C'est tout.
    Des jours c'est facile, des jours c'est pas facile, mais c'est jamais le même jour.

  4. #4
    Membre habitué Avatar de Pecose
    Homme Profil pro
    Batiment
    Inscrit en
    Février 2013
    Messages
    310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Batiment
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2013
    Messages : 310
    Points : 194
    Points
    194
    Par défaut
    Ca me semble bizarre cette effet visuel. Il me semble pas que ca faisait ca avant.
    Je me demande si ca viens pas de la mise a jour JAVA que j'ai du faire depuis Yosemite.
    Des jours c'est facile, des jours c'est pas facile, mais c'est jamais le même jour.

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Les composantes des couleurs en RGB étant des entiers dans un intervalle un nombre fini de valeurs (0 à 256), on peut s'attendre à ce qu'on ne puisse pas avoir une infinité de couleurs et donc parfois des effets de palier comme tu dis. Je pense que dans ton cas, c'est accentué par ton écran (la profondeur).

    Parce que moi j'obtiens pour le dégradé linéraire quelque chose de très convenable (en tout cas, sans l'effet d'aplat que tu montres). Pour le radial c'est un peu moins bien, et ça doit venir de l'algo de la classe, mais je ne suis pas sûr qu'on puisse faire mieux. Faudrait chercher sur le net des algorithmes et refaire sa propre implémentation.

    Voilà ce que j'obtiens personnellement avec :

    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
    public class TestGradient {
     
    	public static void main(String[] args) {
     
    		JFrame frame = new JFrame("test");
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    		frame.setContentPane(createPanel());
    		//frame.setContentPane(createRPanel());
     
    		frame.setSize(200, 200);
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true);
     
     
    	}
     
    	private static Container createPanel() {
    		JPanel panel = new JPanel() {
     
    			protected void paintComponent(java.awt.Graphics g) {
    				super.paintComponent(g);
     
    				Graphics2D g2d = (Graphics2D)g;
     
    				g2d.setPaint(createGradientPaint());
     
    				g2d.fillRect(0, 0, getWidth(), getHeight());
     
     
    			};
     
    			protected Paint createGradientPaint() {
    				return new GradientPaint(0, 0, Color.GREEN, 0, getHeight(), Color.BLUE);
    			}
     
     
    		};
    		panel.setBackground(Color.BLACK);
    		return panel;
    	}
     
    	private static Container createRPanel() {
    		JPanel panel = new JPanel() {
     
    			protected void paintComponent(java.awt.Graphics g) {
    				super.paintComponent(g);
     
    				Graphics2D g2d = (Graphics2D)g;
     
    				double size = Math.min(getHeight(),getWidth())/2;
    				Rectangle2D bounds = new Rectangle2D.Double((getWidth()-size)/2, (getHeight()-size)/2, size, size); 
     
    				g2d.setPaint(createGradientPaint(bounds));
     
    				g2d.fill(bounds);
     
     
    			};
     
    			protected Paint createGradientPaint(Rectangle2D bounds) {
    				return new RadialGradientPaint(bounds,
    						new float[]{0.0f,1f},
    						new Color[]{Color.WHITE,Color.BLACK},CycleMethod.NO_CYCLE);
    			}
     
    		};
    		panel.setBackground(Color.BLACK);
    		return panel;
    	}
     
    }
    Nom : Gradient.PNG
Affichages : 415
Taille : 13,9 Ko

    Nom : RadialGradient.PNG
Affichages : 406
Taille : 83,6 Ko
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #6
    Membre habitué Avatar de Pecose
    Homme Profil pro
    Batiment
    Inscrit en
    Février 2013
    Messages
    310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Batiment
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2013
    Messages : 310
    Points : 194
    Points
    194
    Par défaut
    Ok donc c'est sur il y a un problème.
    Ca vient surement de Yosemite parce que le rendu que tu as chez toi c'est celui que j'avais avant l'installation.
    Du coup si quelqu'un a une solution autre que la réinstallation de Mavericks je suis preneur.

    Merci de ton aide Joel.
    Des jours c'est facile, des jours c'est pas facile, mais c'est jamais le même jour.

  7. #7
    Membre habitué Avatar de Pecose
    Homme Profil pro
    Batiment
    Inscrit en
    Février 2013
    Messages
    310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Batiment
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2013
    Messages : 310
    Points : 194
    Points
    194
    Par défaut
    Nom : Capture d’écran 2014-10-30 à 10.36.51.png
Affichages : 355
Taille : 33,2 Ko

    Voila la confirmation!

    C'est le même programme executer sur Mavericks.
    Donc soit le problème vient de Yosemite soit il vient de Java.
    Sachant que j'ai tester Java7...qqch et Java8U25 et que ca donne le même résultat.

    Une idée de génie?
    Des jours c'est facile, des jours c'est pas facile, mais c'est jamais le même jour.

  8. #8
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Je commencerais par passer en revue tous les RenderingHint, en particulier ce qui ont une valeur de type "default", et tenterais de forcer la valeur (peut-être y'a-t-il un changement dans les valeurs système par défaut ). Mais je te dis ça sans grande conviction.

    Mais à ce que j'ai pu voir sur Internet (j'ai entré "yosemite gradient banding" dans google), tu n'as pas l'air d'être le seul à avoir le problème.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  9. #9
    Membre habitué Avatar de Pecose
    Homme Profil pro
    Batiment
    Inscrit en
    Février 2013
    Messages
    310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Batiment
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2013
    Messages : 310
    Points : 194
    Points
    194
    Par défaut
    Merci Jo-Jo.
    Mais j'ai secouer RenderingHints dans touts les sens mais rien n'y fait.
    Il faudra surement attendre une mise a jour.
    Je laisse peut-être le topic non résolu au cas ou quelqu'un trouve une solution avant moi.
    En tout cas merci beaucoup de ton aide.
    Des jours c'est facile, des jours c'est pas facile, mais c'est jamais le même jour.

  10. #10
    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
    Bizarre, moi je n'ai aucun soucis visible avec le gradient coloré sous Yosemite que ce soit en Swing, FX ou Swing+FX. Mes tests tournent sur un MacBook Pro mid-2012 + JDK 1.8.0_25 avec une GeForce GT 650M.
    Peut-être y a-t-il un soucis avec les pilotes sur des cartes graphiques anciennes (ou au contraire trop récentes)

    Pour le moment, le mieux qui est a faire est de reporter le bug chez Oracle (ou de voter pour si jamais vous arrivez a le trouver).

    EDIT - il est vrai que le gradient est moins joli que celui fait sous Windows (surtout le gradient en gris* en fait) mais le résultat reste loin de ce que tu as posté en début de topic.

    Nom : gradient-yosemite.png
Affichages : 426
Taille : 384,4 Ko

    *Les niveaux de gris ont toujours été un peu WTF-esque dans Java2D.

    Note : la couleur verte de base est plus foncée en JavaFX (javafx.scene.paint.Color.GREEN) qu'en Java2D (java.awt.Color.GREEN) d'ou le fait que les deux gradients couleurs ne sont pas exactement identiques.
    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

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

Discussions similaires

  1. Lisser une courbe d'Hystérésis
    Par topgunus dans le forum Mathématiques
    Réponses: 12
    Dernier message: 05/03/2010, 19h00
  2. neat video - lisser une video
    Par alaindel dans le forum Vidéo
    Réponses: 0
    Dernier message: 29/08/2008, 16h18
  3. Lisser une courbe
    Par thomcat dans le forum Algorithmes et structures de données
    Réponses: 11
    Dernier message: 21/07/2008, 14h19
  4. [LabView 8.5][Débutant] Lisser une courbe
    Par yoann23 dans le forum LabVIEW
    Réponses: 2
    Dernier message: 18/03/2008, 10h57
  5. Lisser une image en temps réel
    Par Montaigne dans le forum Multimédia
    Réponses: 2
    Dernier message: 14/09/2006, 01h25

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