2009-08-28 4 views
2

1から500までの数字を与えたルビの関数を書いて、6桁の16進数のカラーコードを出力します。これは難しいとは思われませんが、どこから始めるべきかわかりません。これをどのように実装できますか?直線的に増やす色の濃さのアルゴリズム

編集

フエに行くために、より信頼性の高い方法のように思えます。私は参照番号を与え、緑色をして、入力番号に基づいて暗くしたり明るくしたりしたいと思います。

入力:10
出力:(RGB又はHSV)にカラーコード基準色の光の陰影である

入力:400
出力:(RGB又はHSV)にカラーコードでありますそれは私が仕事をしなければならない入力だから、基準色

編集2

Iは1と500の間で使用する必要がある唯一の理由のかなり暗いシェードがあります。近くにあるいくつかの数字が同じ色にマップされていれば問題ありません。

+0

正確に尋ねていることがわかりません。サンプルの入力と出力の例を挙げることができますか? –

+0

グレースケールには256の輝度レベルしかありません。例えば0x000000、0x010101 ... 0xfefefe、oxffffff、500は少し意味がないようです。あなたが色相を変更したい場合など。明るい青色から暗い赤色に進むには、より多くのステップがありますが、もう少し問題を明確にする必要があります。 – ScottS

+0

基準色を徐々に暗くしたいのですか、あるいは白から黒への変化に満足していますか? – peejaybee

答えて

2

基本線形補間?

// Pseudocode 
function fade_colour(source, factor) 
    const max = 500 
    const min = 1 

    foreach component in source 
     output[component] = round(source[component] * (max - value)/(max - min)) 
    endforeach 

    return output 
endfunction 
+0

@Ransom、本当ですか?私が値= 1を入力すると、Googleによればソース[コンポーネント]が戻ってきます。入力値が500の場合、0になります。 – strager

+0

申し訳ありませんが、私の考えは分かりません。 、より一般的です。私は私のコメントを撤回する。 –

1

グレーレベルを戻すのではなく、#FFFFFFを#000000に戻すのはなぜですか。とにかく500のレベルの暗さは本当に区別できません。そしてグレーはあなたに256レベルを与えます。

+1

ありがとう、しかし私は参照色を使用する必要があります。グレイは私のために働かないだろう。 – Anon

+1

は1から500までを2で割ると1から250となり、必要なものにはおそらく完璧です。(実際の数学:nuval = oldval * 255/500 - intsを使って、除算する前に乗算することを忘れないでください) –

3

6桁の16進数のカラーコードはRGBです。 あなたが欲しいのは、HSVで作業することです:色相と彩度を選択し、徐々に値を減らします。 HSVからRGBに変換して色を出力します。 例としてhereを参照してください。

+0

他のリンク:http://en.wikipedia.org/wiki/HSL_and_HSV –

+0

これは良いですね。 RubyでHSVからRGBに変換する簡単な方法はありますか? – Anon

+0

@William - はい、Jared Updikeのウィキペディアリンクは簡単な数式を示しています。必要なのは、床、モジュレーション、および算術だけです。 – mbeckish

1

参照色を暗くしたい場合は、簡単です。最も明るいR、G、Bの色があれば、3つの値のそれぞれに(500入力)を掛け、499で割ります。各値を2桁の16進数に変換し、#を付けて追加します正面。

+0

は、他のところで指摘されているように、これはRGBカラーの仕組みではありません。 HSVはこれに適したカラーシステムです。 –

+0

私は異議を理解しているか分からない。他の色空間ではもっと簡単な操作がありますが、RGBカラーを暗くすることは非常に簡単です。 –

関連する問題