Maison > Java > javaDidacticiel > le corps du texte

Comment implémenter une structure de grille pour Pixel Editor à l'aide de la méthode `drawImage()` ?

Patricia Arquette
Libérer: 2024-10-27 00:42:02
original
310 Les gens l'ont consulté

How to Implement a Grid Structure for Pixel Editor Using `drawImage()` Method?

Implémentation de grille pour l'éditeur de pixels

Dans le développement d'un éditeur de pixels, détermination d'une méthode efficace pour implémenter une structure de grille qui s'adapte aux changements de couleur lorsque vous cliquez et faites glisser est essentiel. Une approche typique consiste à utiliser des JButtons individuels pour chaque cellule, mais cela peut s'avérer inefficace et fastidieux.

Grille avec mise à l'échelle de l'image

Une solution alternative consiste à utiliser drawImage() méthode pour créer de grands pixels en mettant à l’échelle les coordonnées de la souris. Cette technique fournit un moyen simple et efficace de modifier la couleur de plusieurs cellules simultanément, comme démontré ci-dessous :

<code class="java">import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.awt.image.BufferedImage;
import javax.swing.Icon;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;

/** @see http://stackoverflow.com/questions/2900801 */
public class Grid extends JPanel implements MouseMotionListener {

    private final BufferedImage img;
    private int imgW, imgH, paneW, paneH;

    public Grid(String name) {
        super(true);
        Icon icon = UIManager.getIcon(name);
        imgW = icon.getIconWidth();
        imgH = icon.getIconHeight();
        this.setPreferredSize(new Dimension(imgW * 10, imgH * 10));
        img = new BufferedImage(imgW, imgH, BufferedImage.TYPE_INT_ARGB);
        Graphics2D g2d = (Graphics2D) img.getGraphics();
        icon.paintIcon(null, g2d, 0, 0);
        g2d.dispose();
        this.addMouseMotionListener(this);
    }

    @Override
    protected void paintComponent(Graphics g) {
        paneW = this.getWidth();
        paneH = this.getHeight();
        g.drawImage(img, 0, 0, paneW, paneH, null);
    }

    @Override
    public void mouseMoved(MouseEvent e) {
        Point p = e.getPoint();
        int x = p.x * imgW / paneW;
        int y = p.y * imgH / paneH;
        int c = img.getRGB(x, y);
        this.setToolTipText(x + "," + y + ": "
            + String.format("%08X", c));
    }

    @Override
    public void mouseDragged(MouseEvent e) {
    }

    private static void create() {
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.add(new Grid("Tree.closedIcon"));
        f.pack();
        f.setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                create();
            }
        });
    }
}</code>
Copier après la connexion

En utilisant cette technique, vous pouvez mettre en œuvre efficacement un système de grille personnalisable avec des propriétés de couleur réglables, répondant aux exigences de votre application d'édition de pixels.

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