索引像素为图片的某些位置着色

时间:2016-03-08 19:57:01

标签: java arrays indexing while-loop pixel

我正在创建一个方法,该方法采用两个参数,其中包含2个索引,一个开始和一个结尾,用于获取正在编辑的图片的位置,并将这些像素转换为不同的颜色。使用while循环索引开始和结束。

我遇到的问题是我只能获得很小一部分来改变颜色:

不要介意一些注释掉的代码。我正在尝试一堆不同的东西。

public void negative(int start, int end)
{
    Pixel[] pixelArray = this.getPixels(); //pixelarray index
    Pixel pixel = null;
    // int height = this.getHeight();
    //int paintPoint = height / 2;
    //int width = this.getWidth();
    int i = 0;
    int red, green, blue = 0;
    // int x = 0;
    Pixel topPixel = null;
    Pixel bottomPixel = null;
    //int startY;
    //int startX;
    int y = start;
    int x = end;
    //int count;
    while( y < this.getHeight())
    {
        y++;
        while (x < this.getWidth()) //loops through index
        {
          pixel = this.getPixel(x,y);
          red = pixel.getRed();
          green = pixel.getGreen();//collects color green
          blue = pixel.getBlue();//collects color blue 
          Color negColor = new Color( 255 - red, 255 - green, 255 - blue);//sets new values of pixels
          pixel.setColor(negColor);

          x++;
          //count = count + 1;
          i++;//indexes continuing
        }
    }
}

1 个答案:

答案 0 :(得分:0)

图片是2D但你将它视为1D(一旦通过你的内部x循环注意它永远不会重置为它的最小值)。如果您希望为给定照片中的任意矩形着色,则parms应包含两个点:minx,miny和maxx maxy,然后您的2D循环逐行访问该区域中的每个点。

// do sanity checks on your parms 

if (this.getWidth() < maxx) {
    maxx = this.getWidth();
}
if (this.getHeight() < maxy) {
    maxy = this.getHeight();
}
if (minx < 0) { 
    minx = 0;
}
if (miny < 0) { 
    miny = 0;
}


for (y = mixy; y < maxy; y++) {

    for (x = mixx; x < maxx; x++) {

        // now your have valid x and y values
    }
}