bonjour à tous, je voudrais savoir s'il possible de recuperer une couleur sur une zone précise d'un
panneau contenant une image par exemple ou un dégradé de couleur en précisant les bornes? merci
d'avance
bonjour à tous, je voudrais savoir s'il possible de recuperer une couleur sur une zone précise d'un
panneau contenant une image par exemple ou un dégradé de couleur en précisant les bornes? merci
d'avance
Salut,
Tu peux t'appuyer sur la classe Robot pour faire çà. Voici un exemple dans lequel la couleur est récupérée à l'endroit du pointeur de la souris :
On peut procéder également en créant une image du composant, mais utiliser la classe Robot est plus simple à mon avis.
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 TestColorGrab { private static final String NOM_FICHIER_IMAGE = "suricate.png"; public static void main(String[] args) { try { new TestColorGrab(); } catch (AWTException e) { e.printStackTrace(); } } public TestColorGrab() throws AWTException { JFrame frame = new JFrame("Grab color"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // composant dont on veut récupérer la couleur Component component = createComponent(); // composant pour afficher la couleur JPanel colorPanel = new JPanel(); colorPanel.setPreferredSize(new Dimension(24,24)); colorPanel.setBorder(BorderFactory.createLineBorder(Color.BLACK)); // layout principal JPanel mainPanel = new JPanel(); mainPanel.setLayout(new BorderLayout()); mainPanel.add(component, BorderLayout.CENTER); mainPanel.add(colorPanel, BorderLayout.SOUTH); frame.getContentPane().add(mainPanel); Robot robot = new Robot(); component.addMouseMotionListener(new MouseMotionAdapter() { @Override public void mouseMoved(MouseEvent e) { Point point = e.getComponent().getLocationOnScreen(); point.x += e.getX(); point.y += e.getY(); Color color = robot.getPixelColor(point.x, point.y); colorPanel.setBackground(color); } }); frame.setSize(300, 300); frame.setLocationRelativeTo(null); frame.setVisible(true); } private Component createComponent() { // un arrière-plant avec dégradé JPanel panel = new JPanel() { @Override protected void paintComponent(Graphics g) { Paint paint = new GradientPaint(new Point(0,0), Color.RED, new Point(0, getHeight()), Color.YELLOW); ((Graphics2D)g).setPaint(paint); g.fillRect(0, 0, getWidth(), getHeight()); } }; panel.setLayout(new BorderLayout()); // un avant-plan avec image JLabel label = new JLabel(new ImageIcon(NOM_FICHIER_IMAGE)); panel.add(label, BorderLayout.CENTER); return panel; } }
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.
Merci Joel.drigo, je vais l'essayer.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager