Java 使用用户输入变量翻转任何图像的方形部分的代码有问题

Java 使用用户输入变量翻转任何图像的方形部分的代码有问题,java,image,arraylist,pixel,Java,Image,Arraylist,Pixel,这是一个方法的代码,该方法在从另一个java文件传递的位置翻转图像的方形部分。目前,这是我试图让它工作的一次尝试。其他各种尝试只允许代码通过一次X迭代,而不会继续到不同Y级别的其他迭代 public void flipVertical(int x, int y, int size) { int middle = x; Pixel leftPixel = null; Pixel rightPixel= null; Pixel value = null;

这是一个方法的代码,该方法在从另一个java文件传递的位置翻转图像的方形部分。目前,这是我试图让它工作的一次尝试。其他各种尝试只允许代码通过一次X迭代,而不会继续到不同Y级别的其他迭代

public void flipVertical(int x, int y, int size)
  {
    int middle = x;
    Pixel leftPixel = null;
    Pixel rightPixel= null;
    Pixel value = null;
    int sizer = size/2;
    int sourceX = x - sizer;
    int targetX = x + sizer;
    int sourceY = y - sizer;
    int targetY = y + sizer;
    int green = 0;
    int blue = 0;
    int red  = 0;
    int green2 = 0;
    int blue2 = 0;
    int red2  = 0;

    //loops through the rows
    for (sourceY = y - sizer; sourceY < targetY; sourceY++)
    {
      //loop from start to end of X
      sourceX = x - sizer;
      for (sourceX = x - sizer; sourceX < targetX; sourceX++)
      {
        //get pixel locations
        leftPixel = getPixel (sourceX, sourceY);
        rightPixel = getPixel(targetX--, sourceY);

        // Swap colors with opposite pixels
        red2 = leftPixel.getRed();
        green2 = leftPixel.getGreen();
        blue2 = leftPixel.getBlue();

        red = rightPixel.getRed();
        green = rightPixel.getGreen();
        blue = rightPixel.getBlue();

        leftPixel.setRed(red);
        leftPixel.setGreen(green);
        leftPixel.setBlue(blue);

        rightPixel.setRed(red2);
        rightPixel.setGreen(green2);
        rightPixel.setBlue(blue2);

      }
    }
  }
public void flipVertical(整数x、整数y、整数大小)
{
int中间=x;
像素leftPixel=null;
Pixel rightPixel=null;
像素值=零;
int sizer=大小/2;
int sourceX=x-sizer;
int targetX=x+sizer;
int sourceY=y-sizer;
int targetY=y+sizer;
绿色整数=0;
int蓝色=0;
红色整数=0;
int green2=0;
int-blue2=0;
int red2=0;
//在行中循环
对于(sourceY=y-sizer;sourceY
您没有为每一行重置
targetX
,即使您正在循环中修改它(
targetX--
)。这将正确处理第一行,但不会正确处理其余行。您需要:

 //loop from start to end of X
 sourceX = x - sizer;
 targetX = x + sizer; // <- reset targetX
 for (sourceX = x - sizer; sourceX < targetX; sourceX++)
    ...
//从X的开始到结束循环
sourceX=x-施胶器;

targetX=x+sizer;//你发布的代码对你有什么影响?@JasonC当前的代码我只看到一行像素被交换,我最近做了另一个版本,只显示最远的像素被交换,没有显示身体像素