2

この質問と他の多くの質問に続いて、RGB値を16進値に変換しようとしています。

最も使用され、受け入れられている回答をコピー/貼り付けて、このスクリプトを作成しました

function componentToHex(c) {
            var hex = c.toString(16);
            return hex.length == 1 ? "0" + hex : hex;
        }

function rgbToHex(rgb) {

            var colors = rgb.split("(")
            colors = colors[1].split(")")
            colors = colors[0].split(",")

            var r = 255 - parseInt(colors[0])
            var g = 255 - parseInt(colors[1])
            var b = 255 - parseInt(colors[2])

            return componentToHex(r) + componentToHex(g) + componentToHex(b);
        }

alert(rgbToHex("rgb(0, 51, 255)"))

結果:

ffcc00

期待される結果:

0033ff

なぜ機能しないのですか?

4

2 に答える 2

3

値を差し引くのparseIntではなく、結果を直接使用します。255

var r = parseInt(colors[0])
var g = parseInt(colors[1])
var b = parseInt(colors[2])

現在、入力値と同等ではなく補完的な値を出力することにより、正反対の色を生成しています。

于 2013-04-11T14:33:26.617 に答える
2

ではなく255 - parseInt(colors[i])、 である必要がありますparseInt(colors[i])

現在の実装では、赤が 0、255 - 0 = 255 の場合、これは 16 進数で FF です。

于 2013-04-11T14:42:43.857 に答える