我正在编写一个程序,我的绘画的每一行都依赖于前一行的绘画。由于新绘画需要指定坐标处前一行的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的图形对象并绘制到它上面。相反,我在输出中得到的只是一个空白屏幕(理想的输出是两个正方形,一个红色和一个蓝色)。
请让我知道我哪里出错了以及如何解决这个问题。非常感谢您的帮助。
谢谢!
答案 0 :(得分:0)
增量绘画有两种常用方法:
查看Custom Painting Approaches以获取有关每种方法的更多信息和工作示例。
答案 1 :(得分:0)
如果你想进一步探索这个话题,Camickr的答案很棒。如果您正在寻找快速解决方案,请不要再进一步 -
而不是将图形对象分配给图像我应该只绘制图像 -
g.drawImage(img,0,0,null);
这会产生所需的结果。