将颜色添加到颜色数组

时间:2017-04-04 20:28:03

标签: java arrays colors

我正在编写一个程序,我在其中拍摄图像,确定该图像中存在的平均红色通道,绿色通道和蓝色通道。我将这些平均值作为参数传递给新颜色。然后我想将这种颜色添加到数组中。我重复这个过程24次。我面临的问题是,当我得到一个新颜色并将其添加到数组时,之前的颜色会被删除。我想保留数组中现有的颜色,并添加到尚未填充的颜色中。这是我尝试过的。

System.out.println("R: "+ rAvg);
System.out.println("G: "+ gAvg);
System.out.println("B: "+ bAvg);


Color newColor = new Color(rAvg, gAvg, bAvg);
Color[] ColorArr = new Color[24];

for(int i = 0; i < ColorArr.length; i++){
     ColorArr[i] = newColor;
        }

System.out.println(Arrays.toString(ColorArr));

这是将一种颜色添加到数组后的输出

 R: 206
 G: 0
 B: 0
 [java.awt.Color[r=206,g=0,b=0],java.awt.Color[r=206,g=0,b=0]

添加新颜色后,这是数组。

R: 211
G: 178
B: 230
[java.awt.Color[r=211,g=178,b=230], java.awt.Color[r=211,g=178,b=230]

最后一种颜色被覆盖并替换为新颜色,而不是进入下一个索引并保留最后一个颜色。我该如何解决这个问题,以便保留数组中输入的颜色,并将新颜色放在上一个?

之后的索引处

2 个答案:

答案 0 :(得分:3)

您可以将代码重构为以下内容:

private Color[] colorArray = new Color[24];
private int currentIndex = 0;

public void addColorToArray(int red, int green, int blue) {
  colorArray[currentIndex++] = new Color(red, green, blue);
}

public void myMethodThatDoThis24Times() {
   addColorToArray(getRedAverage(), getGreenAverage(), getBlueAverage());
   addColorToArray(getRedAverage(), getGreenAverage(), getBlueAverage());
   ...
}

答案 1 :(得分:1)

你的逻辑看起来是正确的。您唯一需要注意的是每次都要创建一个新的颜色对象实例。

//ColorArr[i] = newColor;                    // Instead of this
ColorArr[i] = new Color(rAvg, gAvg, bAvg);   // Do this for each element in array

您最初正在执行Color newColor = new Color(rAvg, gAvg, bAvg);并为newColor中的所有元素分配相同的ColorArr实例。

因此,newColor实例中的单个更改反映了数组中所有引用元素的更改。

作为@user alayor,正确建议使用不同的RGB值创建Color(rAvg,gAvg,bAvg)的新实例。