【发布时间】:2023-03-29 22:21:02
【问题描述】:
我有一个包含 24 种颜色的数组。我想做的是把红色和橙色分开,这样它们的颜色就不会那么接近了。我有 4 种“红色”颜色和 4 种“橙色”颜色。我注意到的是,红色的 G 值和 B 值总是比橙色的高。所以我想要做的是遍历颜色数组并根据它的 RGB 值确定它是红色还是橙色并将其分配给Color.ORANGE 或Color.RED。
for(int i = 0; i < colorArray.length; i++){
if(colorArray[i].getRed() == 255 && colorArray[i].getGreen() <= 20 && colorArray[i].getBlue() <= 20){
colorArray[i] = Color.RED;
}
if(colorArray[i].getRed() == 255 && colorArray[i].getGreen() >= 21 && colorArray[i].getBlue() <= 21){
colorArray[i] = Color.ORANGE;
}
}
问题在于红色的 getGreen 和 getBlue 并不总是低于 20,它可能是感知到的“红色”颜色中有更多的绿色,但是它的绿色和蓝色值将始终小于橙色的值。我怎样才能改变它以使其使用这种逻辑?
这是一个带有颜色的示例数组。
Color Array: [java.awt.Color[r=197,g=255,b=106], java.awt.Color[r=197,g=255,b=106], java.awt.Color[r=0,g=0,b=255], java.awt.Color[r=255,g=25,b=61], java.awt.Color[r=255,g=97,b=112], java.awt.Color[r=255,g=39,b=67], java.awt.Color[r=51,g=255,b=114], java.awt.Color[r=255,g=108,b=113], java.awt.Color[r=197,g=255,b=106], java.awt.Color[r=0,g=0,b=255], java.awt.Color[r=254,g=231,b=255], java.awt.Color[r=254,g=231,b=255], java.awt.Color[r=254,g=231,b=255], java.awt.Color[r=255,g=79,b=45], java.awt.Color[r=255,g=85,b=51], java.awt.Color[r=197,g=255,b=106], java.awt.Color[r=0,g=0,b=255], java.awt.Color[r=51,g=255,b=114], java.awt.Color[r=51,g=255,b=114], java.awt.Color[r=255,g=39,b=67], java.awt.Color[r=51,g=255,b=114], java.awt.Color[r=0,g=0,b=255], java.awt.Color[r=254,g=231,b=255], java.awt.Color[r=255,g=39,b=67]]
【问题讨论】:
-
你能按 B+G 的总量排序吗?
-
不,我不想对数组进行排序。它的顺序对我正在使用的东西很重要。 @OliverCharlesworth
-
我的意思是对它们进行排序纯粹是为了分类。你不必坚持这个顺序。
-
如果可以做到那没关系,但是我需要恢复原来的顺序。
-
在你的 if 语句中为什么不做
if(colorArray[i].getRed() == 255 && colorArray[i].getGreen() + colorArray[i].getBlue() <= 80)和if(colorArray[i].getRed() == 255 && colorArray[i].getGreen() + colorArray[i].getBlue() <= 200)当然你可以改变这些值,但它们对我来说似乎很好。但高于 200 则更像黄色而不是橙色