我正在寻找一种Java方法来制作一个简单的网格,如果你拖动鼠标,它会填充像素。所以只是一个简单的绘图表面......
现在重要的是我可以选择分辨率或换句话说选择像素大小......
我需要在网格中绘制的图形作为神经网络中的输入模式。所以我想稍后在 2Darray 中检索信息。
例如:一个 20*20 的网格,其中每个“像素”(或正方形可能更合适)实际上是一个正方形,可以说是 10*10 实际像素。
如何制作一个简单的 PixelGrid,我可以在其中用鼠标绘制大像素(选择分辨率)?
boolean
(用于存储选定区域或像素),所有数组元素默认为 false。MouseMotionListener
到自定义绘画表面。JPanel
,或..BufferedImage
显示在一个JLabel
mouseDragged(MouseEvent)
方法中,确定要转换为的“像素”,并将其设置为true
.repaint()
在面板上调用,要么更新图像并重新绘制标签。true
数组元素对应区域的颜色。谢谢您的帮助!我认为有人可能已经制作了一个像我想要的那样的网格类,但我没有等待,而是接受了你的建议,开始按照你的思路编写自己的代码。
如果您只想执行并查看代码。我仍然对 dragMouse-action 有一个小问题,它总是填充我想要的那个正上方的正方形。为什么是这样?另外请告诉我我是否在代码中做了一些奇怪或不必要的事情。再次感谢你。
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
public class GridBox extends JPanel implements MouseMotionListener {
private static final long serialVersionUID = 1L;
//The Array with the Rectangles
private static List<List<DrawnRectangle>> pixels = new ArrayList<List<DrawnRectangle>>();
//The Frame (JComponent)
private static JFrame f = null;
public GridBox()
{
this.addMouseMotionListener(this);
}
public static void main(String[] args)
{
f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setPreferredSize(new Dimension(400, 400));
f.add(new GridBox());
f.pack();
f.setVisible(true);
}
@Override
protected void paintComponent(Graphics g)
{
drawGrid((Graphics2D)g, 20, 20, 400, 400);
}
public static void drawGrid(Graphics g, int rowAmount, int columnAmount, int width, int height)
{
int pixelSizeW = width / columnAmount;
int pixelSizeH = height / rowAmount;
DrawnRectangle.defaultThickness = 1;
for(int row = 0; row < rowAmount; row++)
{
List<DrawnRectangle> currentRow = new ArrayList<DrawnRectangle>();
for(int column = 0; column < columnAmount; column++)
{
DrawnRectangle current = new DrawnRectangle( f, (row*pixelSizeW), (column*pixelSizeH), pixelSizeW, pixelSizeH);
currentRow.add(current);
current.paint();
}
pixels.add(currentRow);
}
}
public void clearGrid()
{
for( List<DrawnRectangle> ListRect : pixels)
{
for( DrawnRectangle rect : ListRect)
{
rect.clearInterior();
}
}
}
@Override
public void mouseDragged(MouseEvent e)
{
Point p = e.getPoint();
for( List<DrawnRectangle> ListRect : pixels)
{
for( DrawnRectangle rect : ListRect)
{
if( rect.contains(p))
{
rect.fill(Color.black);
}
}
}
}
@Override
public void mouseMoved(MouseEvent arg0)
{
}
}