将rgb颜色转换为x,y方向和背面

时间:2014-04-22 14:34:50

标签: java android colors direction

想象一下圆形颜色托盘like this

我正在构建一个游戏(Android),您可以在其中绘制线条,当您绘制它时,您将在每两个点之间创建矢量。我需要将这个方向转换为托盘上的颜色。因此,在绘制时,线条的颜色将取决于您的滑动方向。 我也需要将颜色转换为方向。无法弄清楚3 rgb params与x,y方向之间的关系。 当然,我可以限制颜色数量,例如8.然后创建数组,每个单元格将代表不同颜色的方向。但是我想知道是否有可能在不分配大量内存或使用不必要的if \ else的情况下使用所有颜色?

更新: 多亏了多米的建议,我能够做我想做的事。 Thanx man!

这就是我将矢量转换为颜色的方式:

double angle = Math.atan2(vector_x, vector_y) * 57.2957795;
double final_angle = angle<0? 360 + angle:angle;
int myRGBColor = Color.HSVToColor(new float[]{(float) final_angle, saturation, brightness} );

这就是我将颜色转换为矢量的方式:

int sample = bmp.getPixel( (int)X, (int)Y);
//int a = (sample >> 24) & 255;
int r = (sample >> 16) & 255;
int g = (sample >> 8) & 255;
int b = sample & 255;

float[] hsv = new float[3];
android.graphics.Color.RGBToHSV(r, g, b, hsv);
float hue = hsv[0]; 
vector_x =  Math.toDegrees( Math.sin(  Math.toRadians(hue) ) );
vector_y =  Math.toDegrees( Math.cos(  Math.toRadians(hue) ) );

欢迎所有人play my game

1 个答案:

答案 0 :(得分:3)

如果您有矢量,则可以使用该度数来计算HSL系统的颜色。 如果你继续round color pallet你可以看到饱和度(S)总是100并且亮度(L)总是50,那么你只需要使用度数(0-360)来获得HUE并拥有一个完整的HSL颜色(度,100,50)。 然后,您可以将RGB转换为HSL,将HSL转换为RGB