Heim > Java > javaLernprogramm > Hauptteil

Wie erstelle ich in Java ein Pixelraster für eine präzise Farbmanipulation?

DDD
Freigeben: 2024-10-27 15:16:29
Original
684 Leute haben es durchsucht

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

Erstellen eines Pixelrasters in Java

Für angehende Pixeleditoren kann das Entwerfen eines Rastersystems, das eine präzise Farbmanipulation ermöglicht, entmutigend sein. Allerdings bietet Java einige nützliche Komponenten, die den Prozess rationalisieren können.

JButton als Rasterzelle

Die Verwendung von JButtons als Rasterzellen mag zunächst ineffizient erscheinen. Während es die Änderung einzelner Zellen ermöglicht, wird es bei der Arbeit mit zahlreichen Zellen umständlich.

Alternative Rasterimplementierung

Eine effektivere Lösung ist die Verwendung der Methode drawImage() und skalieren Sie Mauskoordinaten. Diese Technik erzeugt größere „Pixel“ und behält gleichzeitig das gitterartige Verhalten bei.

Beispielcode

Der folgende Code veranschaulicht diesen Ansatz:

<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>
Nach dem Login kopieren

Verwendung

  1. Erstellen Sie ein Rasterobjekt, indem Sie einen Symbolnamen übergeben (z. B. „Tree.closedIcon“).
  2. Fügen Sie das Raster zu einem JFrame hinzu.
  3. Führen Sie die Anwendung aus.

Ergebnis

Das Raster wird angezeigt, sodass Benutzer die Maus über das pixelige Bild bewegen und gleichzeitig Farbinformationen für erhalten können jede Zelle.

Das obige ist der detaillierte Inhalt vonWie erstelle ich in Java ein Pixelraster für eine präzise Farbmanipulation?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage