Maison  >  Article  >  Java  >  Comment créer une grille pixélisée en Java pour une manipulation précise des couleurs ?

Comment créer une grille pixélisée en Java pour une manipulation précise des couleurs ?

DDD
DDDoriginal
2024-10-27 15:16:29601parcourir

How to Create a Pixelated Grid in Java for Precise Color Manipulation?

Création d'une grille de pixels en Java

Pour les éditeurs de pixels en herbe, concevoir un système de grille permettant une manipulation précise des couleurs peut être intimidant. Cependant, Java propose des composants utiles qui peuvent rationaliser le processus.

JButton en tant que cellule de grille

Au départ, utiliser JButtons comme cellules de grille peut sembler inefficace. Bien que cela permette la modification de cellules individuelles, cela devient fastidieux lorsque vous travaillez avec de nombreuses cellules.

Implémentation de grille alternative

Une solution plus efficace consiste à utiliser la méthode drawImage() et mettre à l'échelle les coordonnées de la souris. Cette technique crée des « pixels » plus grands tout en conservant un comportement de type grille.

Exemple de code

Le code suivant illustre cette approche :

<code class="java">import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.awt.image.BufferedImage;

public class Grid extends JPanel implements MouseMotionListener {

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

    public Grid(String name) {
        super(true);
        // Load an image icon
        Icon icon = UIManager.getIcon(name);
        imgW = icon.getIconWidth();
        imgH = icon.getIconHeight();
        // Calculate panel dimensions
        this.setPreferredSize(new Dimension(imgW * 10, imgH * 10));
        // Create an image buffer
        img = new BufferedImage(imgW, imgH, BufferedImage.TYPE_INT_ARGB);
        // Draw the icon to the buffer
        Graphics2D g2d = (Graphics2D) img.getGraphics();
        icon.paintIcon(null, g2d, 0, 0);
        g2d.dispose();
        // Register mouse motion listener
        this.addMouseMotionListener(this);
    }

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

    @Override
    public void mouseMoved(MouseEvent e) {
        // Scale mouse coordinates based on panel dimensions
        Point p = e.getPoint();
        int x = p.x * imgW / paneW;
        int y = p.y * imgH / paneH;
        // Retrieve and display color information at the grid location
        int c = img.getRGB(x, y);
        this.setToolTipText(x + "," + y + ": "
                + String.format("%08X", c));
    }

    @Override
    public void mouseDragged(MouseEvent e) {
    }

    public static void main(String[] args) {
        // Create a JFrame and add the Grid panel
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.add(new Grid("Tree.closedIcon"));
        f.pack();
        f.setVisible(true);
    }
}</code>

Utilisation

  1. Créez un objet Grid en passant un nom d'icône (par exemple, "Tree.closedIcon").
  2. Ajoutez la grille à un JFrame.
  3. Lancer l'application.

Résultat

La grille s'affichera, permettant aux utilisateurs de déplacer la souris sur l'image pixélisée tout en obtenant des informations de couleur pour chaque cellule.

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