绘制现有图像

时间:2017-09-29 17:33:23

标签: java swing user-interface graphics awt

我正在编写一个程序,我的绘画的每一行都依赖于前一行的绘画。由于新绘画需要指定坐标处前一行的RGB值,我将JPanel转换为BufferedImage,然后使用getRGB()获取Color。

当我为新线制作图像时,我遇到了转发初始图像的问题。

以下代码不起作用 -

    @Override
    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        if(line==1)
        {
            g.setColor(Color.WHITE);
            g.fillRect(0,0,100,100);
            g.setColor(Color.RED);
            g.fillRect(25,25,20,20);
        }
        else if(line!=1)
        {
            g=img.getGraphics();
            g.setColor(Color.BLUE);
            g.fillRect(50,50,25,25);
        }
    }

其中line是实例变量,img是第一行的BufferedImage -

Paint_Test ob=new Paint_Test();
frame.add(ob);
img=toBufferedImage(ob);

按行

  g=img.getGraphics();

我试图获取原始bufferedimage的图形对象并绘制到它上面。相反,我在输出中得到的只是一个空白屏幕(理想的输出是两个正方形,一个红色和一个蓝色)。

请让我知道我哪里出错了以及如何解决这个问题。非常感谢您的帮助。

谢谢!

2 个答案:

答案 0 :(得分:0)

增量绘画有两种常用方法:

  1. 绘制到BufferedImage然后绘制图像
  2. 保持要绘制的对象的ArrayList。然后迭代遍历ArrayList并绘制所有对象。
  3. 查看Custom Painting Approaches以获取有关每种方法的更多信息和工作示例。

答案 1 :(得分:0)

如果你想进一步探索这个话题,Camickr的答案很棒。如果您正在寻找快速解决方案,请不要再进一步 -

而不是将图形对象分配给图像我应该只绘制图像 -

g.drawImage(img,0,0,null);

这会产生所需的结果。