我正在创建一个方法,该方法采用两个参数,其中包含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
}
}
}
答案 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
}
}