2012-03-19 2 views
3

RGB에서 16 진수 변환기를 발견하고 RGBA 16 진수 변환기를 만들려고합니다. 원래 rgb2hex 기능은 작동하지만 새로운 rgba2hex 기능은 작동하지 않습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? rgba 함수가 gba를 반환합니다.자바 스크립트 이동 문제 (rgb 및 rgba 16 진수)

// convert RGB color data to hex 
function rgb2hex(r, g, b) { 
    if (r > 255 || g > 255 || b > 255) 
     throw "Invalid color component"; 
    return ((r << 16) | (g << 8) | b).toString(16); 
} 

// convert RGBA color data to hex 
function rgba2hex(r, g, b, a) { 
    if (r > 255 || g > 255 || b > 255 || a > 255) 
     throw "Invalid color component"; 
    return ((r << 32) | (g << 16) | (b << 8) | a).toString(16); 
} 

예 :

alert(rgb2hex(255, 155, 055)); 
alert(rgba2hex(255, 155, 055, 255)); 

전류 출력 : ff9b2d9b2dff

예상 출력 : ff9b2d

답변

6

문제는 자바 스크립트의 비트 수학이 31 비트가 모자라므로 문제가 해결되지 않는다는 것입니다. 당신은 일반적인 수학 작전이 아닌 비트 작전을 사용해야합니다

// convert RGBA color data to hex 
function rgba2hex(r, g, b, a) { 
    if (r > 255 || g > 255 || b > 255 || a > 255) 
     throw "Invalid color component"; 
    return (256 + r).toString(16).substr(1) +((1 << 24) + (g << 16) | (b << 8) | a).toString(16).substr(1); 
} 

는 또한 첫 번째 구성 요소가 < 10 인 경우, 출력이 충분한 자리가없는 원래의 알고리즘으로 문제를 해결했습니다.

어쨌든이 방법은 작동하지 않습니다 ... #ff9b2dff은 (는) 유효한 색상이 아니지만 신경 쓸 필요가 없습니다.

+0

감사합니다. 알파 값은 사용자 정의 0-255 정수입니다. – Justin808

-1

난 당신이 여기에 아이디어를 놓치고 있다고 생각 ff9b2dff, 알파 값 RGB posphors에 의해 생성 된 색상의 불투명도를 지정합니다. 이는 항상 0 사이에 있음을 의미합니다. 이 값을 프로젝트에 "사용자 지정"하려고하지 않는 한 표준 규칙에 따라 1입니다.

함수의 반환 값이 Javascript의 비트 이동 메커니즘에 제한이있는 것으로 보입니다. 대신 r.toString(16) + g.toString(16) + b.toString(16) + a.toString(16)을 반환하는 것이 좋습니다.

관련 문제