我正在编写一个程序,我在其中拍摄图像,确定该图像中存在的平均红色通道,绿色通道和蓝色通道。我将这些平均值作为参数传递给新颜色。然后我想将这种颜色添加到数组中。我重复这个过程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]
最后一种颜色被覆盖并替换为新颜色,而不是进入下一个索引并保留最后一个颜色。我该如何解决这个问题,以便保留数组中输入的颜色,并将新颜色放在上一个?
之后的索引处答案 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)的新实例。