Maison >Java >javaDidacticiel >Comment puis-je dessiner efficacement des graphiques en constante évolution en Java ?

Comment puis-je dessiner efficacement des graphiques en constante évolution en Java ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-23 21:05:12620parcourir

How Can I Efficiently Draw Constantly Changing Graphics in Java?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn