将JPanel的内容复制到BufferedImage

时间:2016-02-12 13:30:46

标签: java swing graphics bufferedimage

第一次,我将BufferedImage从列表中插入到我的扩展类JPanel中:

@Override
protected void paintComponent(Graphics g){
    super.paintComponent(g);

    if (controlWhichImage == 1){
        for (BufferedImage eachImage : docList){
            g.drawImage(eachImage, 0,inty,imageWidth,imageHeight,null);
            intx += eachImage.getWidth();
            inty += eachImage.getHeight() * zoomAdd;
        }

        if (intx >= this.getWidth() || inty >= this.getHeight()){
            inty = 0;
        }

下次我想将JPanel的内容复制到BufferedImage

public void recordImage(){
    controlWhichImage = 2;
    this.createdImage = new BufferedImage(this.getWidth(), this.getHeight(), BufferedImage.TYPE_INT_ARGB);

    Image halfWay = this.createImage(this.getWidth(), this.getHeight());
    //now cast it from Image to bufferedImage
    this.createdImage = (BufferedImage) halfWay;
}

然后,修改BufferedImage并将其绘制回JPanel

if (controlWhichImage == 2){
    g.drawImage(this.createdImage,0,inty,this.getWidth(),this.getHeight(),null);
}

第二次我得到一个空白面板。

我希望这很清楚,任何帮助都会感激不尽。

很抱歉我的解释不好。我会尽力使自己更清楚。

在每次迭代中,用户都可以在Jpanel上绘制图像。

我想要做的是将用户更改的jpanel复制到缓冲的图像中,然后将在Jpanel中再次由用户进行编辑。

这一直持续到用户选择打印。

除了我在这里放置的代码之外,还有用户绘制的控件,目前我正在努力将原始Jpanel中的初始更新图像放入bufferedImage然后再返回到JPanel。 希望这会让它更清晰

1 个答案:

答案 0 :(得分:1)

要绘制到BufferedImage,您可以执行类似于paintComponent方法中的操作,但使用BufferedImage。也许是一种方法:

echo "<br />\n";

然后,您可以将返回的图像存储到变量中,然后根据需要将其绘制到JPanel中,或者将其写入磁盘。

如果这不能回答您的问题,那么您再次想要告诉我们您的MCVE