用 Java 创建像素网格
对于有抱负的像素编辑器来说,设计一个允许精确颜色操作的网格系统可能是令人畏惧的。然而,Java 提供了一些有用的组件来简化该过程。
JButton 作为网格单元
最初,使用 JButton 作为网格单元可能看起来效率低下。虽然它允许修改单个单元格,但在处理大量单元格时会变得很麻烦。
替代网格实现
更有效的解决方案是利用drawImage()方法和缩放鼠标坐标。此技术创建更大的“像素”,同时保留类似网格的行为。
示例代码
以下代码演示了此方法:
<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>
用法
结果
将显示网格,允许用户将鼠标移动到像素化图像上,同时获取颜色信息每个细胞。
以上是如何在 Java 中创建像素化网格以进行精确的颜色操作?的详细内容。更多信息请关注PHP中文网其他相关文章!