2012-03-19 8 views
3

RGBから16進のコンバーターを見つけましたが、RGBAから16進のコンバーターにしようとしています。元のrgb2hex機能は動作しますが、新しいrgba2hex機能はありません。私は間違って何をしていますか? rgba関数はgba、no rを返しています。javascriptシフトの問題(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

予想される出力:ff9b2dff9b2dff

答えて

6

あなたの問題は、JavaScriptのビット単位の計算で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

私はあなたがここでの考え方を逃していると感じ、アルファ値RGBポーズによって生成される色の不透明度を指示します。つまり、常に0の間になりますあなたのプロジェクトに対してこの値を "カスタム"にしない限り、標準的な慣習で1を返します。

関数の戻り値は、Javascriptのビットシフト機構に限界があるようです。代わりにr.toString(16) + g.toString(16) + b.toString(16) + a.toString(16)を返すことを検討してください。

関連する問題