Maison > Java > javaDidacticiel > le corps du texte

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

Mary-Kate Olsen
Libérer: 2024-11-23 21:05:12
original
568 Les gens l'ont consulté

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);
}
Copier après la connexion
public void paintComponent(Graphics g) {
    if (!SwingUtilities.isEventDispatchThread()) {
        throw new RuntimeException("Repaint attempt is not on event dispatch thread");
    }
    final Graphics2D g2 = (Graphics2D) g;
    //...
Copier après la connexion

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));
        //...
    }
}
Copier après la connexion

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);
    }
});
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal