2014-04-22 1 views
0

둥근 색상 팔레트 like this을 상상해보십시오.rgb 색상을 x, y 방향으로 변환 후

나는 선을 그릴 수있는 게임 (안드로이드)을 만들고 있는데 그것을 그리면 각 두 점 사이에 벡터를 만들고있다. 이 방향을 팔레트의 색상으로 변환해야합니다. 따라서 그리는 경우 선의 색상은 스 와이프 방향에 따라 달라집니다. 색상을 방향으로 변환해야합니다. 3 rgb 매개 변수와 x, y 방향 간의 관계를 알아낼 수 없습니다. 물론 색상의 수를 8로 제한 할 수 있습니다. 그런 다음 배열을 만들고 모든 셀은 다른 색상의 방향을 나타냅니다. 하지만 난 메모리의 톤을 할당하지 않고 또는 불필요한 if \ else를 사용하지 않고 모든 색상을 사용할 수 있는지 궁금해?

업데이트 : domi의 조언 덕분에 나는 원하는 것을 할 수있었습니다. 고맙습니다!

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에 오신 것을 환영합니다.

답변

3

벡터가있는 경우 학위를 사용하여 HSL 시스템으로 색상을 계산할 수 있습니다. round color pallet에 가면 채도 (S)가 항상 100이고 휘도 (L)가 항상 50이라는 것을 알 수 있습니다. 다음으로도 (0-360)를 사용하여 색조가 있고 완전한 HSL 색 학위, 100, 50). 그러면 RGB를 HSL로 변환하고 HSL을 RGB로 변환 할 수 있습니다.

+0

Thx! 미안해, 너를 업신 여길 수 없어. 평판 포인트를 얻지 마십시오. – RealNmae

+0

당신은 그의 대답을 받아 들일 수 있습니다 - 그냥 눈금 단추를 클릭하십시오. –

관련 문제