Comment dessiner des graphiques en constante évolution en Java
Dessiner des graphiques en constante évolution peut être une tâche difficile en Java, en particulier lorsque l'on vise des animations fluides et l'efficacité. Plongeons dans une solution améliorée qui résout les problèmes de performances mis en évidence dans la question d'origine :
Séparation de la détection et du dessin
Le code initial combinait les tâches de détection des couleurs des pixels et dessiner les graphiques. La séparation de ces processus améliore l'efficacité.
private void setColorAt(int x, int y, Color pixelColor) { model[x][y] = pixelColor; repaint(40 + x * STEP, 45 + y * STEP, 40 + (x * STEP) - 3, 45 + (y * STEP) - 3); }
public void paintComponent(Graphics g) { if (!SwingUtilities.isEventDispatchThread()) { throw new RuntimeException("Repaint attempt is not on event dispatch thread"); } final Graphics2D g2 = (Graphics2D) g; //...
Récupération des pixels en masse
Le code d'origine récupérait les couleurs des pixels une par une. En utilisant robot.createScreenCapture(...), nous pouvons récupérer les 64 pixels à la fois, réduisant ainsi les frais généraux.
final BufferedImage capture = robot.createScreenCapture(rect); for (int x = 0; x < 8; x++) { for (int y = 0; y < 8; y++) { final Color pixelColor = new Color(capture.getRGB(x, y)); //... } }
Découpage et filetage intelligents
Seuls les les pixels modifiés doivent être redessinés. En utilisant repaint() avec des coordonnées spécifiques, nous limitons la mise à jour aux zones concernées. De plus, le fait de garantir que toutes les mises à jour des modèles et des vues ont lieu sur le fil de répartition des événements évite les problèmes de concurrence.
SwingUtilities.invokeLater(new Runnable() { public void run() { view.setColorAt(finalX, finalY, pixelColor); } });
Le code amélioré met en valeur les avantages de ces optimisations, ce qui se traduit par des performances considérablement améliorées.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!