首页 > 解决方案 > 为什么跟随 Java 代码的行为就像一个重复循环?

问题描述

我试图将图像绘制到自身上一次。但它的行为有点像循环,图像被一遍又一遍地绘制了很多次。为什么它表现得像一个循环?

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import java.awt.Graphics;

 public class Swapper{
 public static void main(String[] args) throws 
 IOException {
    try{
        BufferedImage img = ImageIO.read(new File("picture2.jpg"));

Graphics g = img.getGraphics();

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

File file = new File("aaaimage3.png");
    ImageIO.write(img,"png", file);
}

catch(IOException e){}
}
}

例如,使用此输入:

标准电视测试画面

你得到这个输出:

重复复制的图像隧道效应

标签: java

解决方案


您正在从自身和自身绘制图像。这意味着图像在被复制时正在被修改,并且由于它一次复制一个部分,因此会产生这种效果。

例如,假设您尝试将此字符串复制到其自身的偏移量为 2 处,并且一次可以移动 4 个字符:

abcdefghijklmnop

首先,您读取字符 0-3 ( abcd) 并将它们复制到字符串中,给出:

abcdefghijklmnop
^---
  v---
ababcdghijklmnop

然后复制字符 4-7 (cdgh) 并将它们复制到下一个位置:

ababcdghijklmnop
    ^---
      v---
ababcdcdghklmnop

然后你复制8-11:

ababcdcdghklmnop
        ^---
          v---
ababcdcdghghklop

等等。如您所见,由于一次只从不断变化的源复制某个缓冲区,您最终会得到重复的模式,例如ababcdcdghgh..


推荐阅读