Java 简单的像素网格,在那里我可以用鼠标画大像素(选择分辨率)?

Java 简单的像素网格,在那里我可以用鼠标画大像素(选择分辨率)?,java,matrix,grid,awt,draw,Java,Matrix,Grid,Awt,Draw,我正在寻找一种在Java中制作一个简单网格的方法,如果你拖动鼠标,它将填充像素。所以只是一个简单的绘图表面 现在重要的是,我可以选择分辨率,或者换句话说,选择像素大小 我需要在网格中绘制的图形作为神经网络的输入模式。所以我想稍后在2Darray中检索信息 例如:一个20*20的网格,其中每个“像素”(或更合适的正方形)实际上是一个10*10实像素的正方形 如何制作一个简单的像素网格,在那里我可以用鼠标画大像素(选择分辨率) 创建一个布尔值的二维数组(用于存储选定区域或像素),所有数组元素的默认值

我正在寻找一种在Java中制作一个简单网格的方法,如果你拖动鼠标,它将填充像素。所以只是一个简单的绘图表面

现在重要的是,我可以选择分辨率,或者换句话说,选择像素大小

我需要在网格中绘制的图形作为神经网络的输入模式。所以我想稍后在2Darray中检索信息

例如:一个20*20的网格,其中每个“像素”(或更合适的正方形)实际上是一个10*10实像素的正方形

如何制作一个简单的像素网格,在那里我可以用鼠标画大像素(选择分辨率)

  • 创建一个
    布尔值的二维数组(用于存储选定区域或像素),所有数组元素的默认值为false
  • 向自定义绘制曲面添加一个
  • 绘画表面可能是
    • 扩展的
      JPanel
      ,或
    • JLabel中显示的
      buffereImage
  • 在该方法中,确定转换为什么“像素”,并将其设置为
    true
  • 在面板上调用
    repaint()
    ,或者更新图像并重新绘制标签
  • 绘制时,更改每个
    true
    数组元素对应区域的颜色

  • 谢谢你的帮助!我想可能有人已经创建了一个我想要的网格类,但是我没有等待,而是接受了你的建议,开始按照你的思路编写代码

    如果您只想执行并查看代码。我仍然有一个小问题,拖拉鼠的行动,它总是填补了广场上的权利,我想要的。为什么会这样?也请告诉我,如果我做了一些奇怪的或不必要的代码。再次感谢你

    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)
        {
    
        }
    }
    
    import java.awt.*;
    导入java.awt.event.*;
    导入java.util.*;
    导入javax.swing.*;
    公共类GridBox扩展JPanel实现MouseMotionListener{
    私有静态最终长serialVersionUID=1L;
    //具有矩形的数组
    私有静态列表像素=新的ArrayList();
    //框架(JComponent)
    私有静态JFrame f=null;
    公共网格框()
    {
    this.addMouseMotionListener(this);
    }
    公共静态void main(字符串[]args)
    {
    f=新的JFrame();
    f、 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f、 setPreferredSize(新尺寸(400400));
    f、 添加(新网格框());
    f、 包装();
    f、 setVisible(真);
    }
    @凌驾
    受保护组件(图形g)
    {
    绘图网格((图形2D)g、20、20、400、400);
    }
    公共静态void drawGrid(图形g、int rowAmount、int columnAmount、int width、int height)
    {
    int pixelSizeW=宽度/列数量;
    int pixelSizeH=高度/行数;
    DrawnRectangle.defaultThickness=1;
    对于(int row=0;row
    哦,是的,您必须将DrawnRectangle添加到包中,您可以在这里找到它: