Rumah >Java >javaTutorial >Bagaimana untuk Melaksanakan Struktur Grid untuk Editor Pixel Menggunakan Kaedah `drawImage()`?

Bagaimana untuk Melaksanakan Struktur Grid untuk Editor Pixel Menggunakan Kaedah `drawImage()`?

Patricia Arquette
Patricia Arquetteasal
2024-10-27 00:42:02327semak imbas

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

Pelaksanaan Grid untuk Editor Pixel

Dalam pembangunan editor piksel, menentukan kaedah yang berkesan untuk melaksanakan struktur grid yang menampung perubahan warna apabila diklik dan diseret adalah penting. Pendekatan biasa melibatkan penggunaan JButton individu untuk setiap sel, tetapi ini mungkin tidak cekap dan menyusahkan.

Grid dengan Penskalaan Imej

Penyelesaian alternatif melibatkan penggunaan drawImage() kaedah untuk mencipta piksel besar dengan menskalakan koordinat tetikus. Teknik ini menyediakan cara yang mudah dan cekap untuk mengubah warna berbilang sel secara serentak, seperti yang ditunjukkan di bawah:

<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>

Dengan menggunakan teknik ini, anda boleh melaksanakan sistem grid boleh disesuaikan dengan sifat warna boleh laras dengan cekap, memenuhi keperluan aplikasi editor piksel anda.

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Struktur Grid untuk Editor Pixel Menggunakan Kaedah `drawImage()`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn