2011-07-21 21 views
3

値から色を取得するにはプロジェクターが必要です。 私はデータを持っており、各データは色で表されなければならないことを説明します。数値から色の値を取得

赤色は最大値、青色は最小値、緑色は中間値です。ヒートマップの一種。

したがって、適切な色を返す関数が必要です。

私はこのような何か試してみました:私は、操作の多くを試してみました私は愚かでなければなりませんが、私は右を見つけることができません...私は赤と青、緑決して取得、

function datatocolor($min, $max, $value) 
    { 
     $half = (($min + $max)/2); 

     if ($value > $half) 
     { 
      $r = (255 * ($value+$min-$half))/$half; 
      $g = 255 - $r; 
      $b = 0; 
     } 
     else { 
      $b = (255 * ($half-$value+$min))/$half; 
      $g = 255 - $b; 
      $r = 0;   
     } 
     $color = array(intval($r), intval($g), intval($b)); 
     return $color; 
    } 

をしかし、操作... おかげさまであなたの助けをありがとう!

+0

この質問に対する3番目の回答を確認してください。 http://stackoverflow.com/questions/3407942/rgb-values-of-visible-spectrum – Matt

+0

リンクのおかげで、私はTSVの用語を知らなかった。 –

答えて

2

私はPHPの専門家ではありませんが、私が知る限り、問題はこのコードブロックではありません。私は念のためにJavaであなたのアルゴリズムをテストし、それが正しいとなります

public static void main(String[] args) { 
    int min = 0; 
    int max = 10; 
    int half = (min + max)/2; 

    int r, g, b; 

    // Cycling through the values for completeness' sake. 
    for (int value = 0; value <= 10; value++) { 
     if (value > half) { 
     r = (255 * (value + min - half))/half; 
     g = 255 - r; 
     b = 0; 
    } else { 
     b = (255 * (half - value + min))/half; 
     g = 255 - b; 
     r = 0; 
    } 
    System.out.println("Value: " + value + " - " + new Color(r, g, b)); 
} 

これからの出力は、あなたが期待するものである - 最低で純粋な青、真ん中で純粋な緑、赤の純粋最大:あなたが提供してきたものに基づいて

Value: 0 - java.awt.Color[r=0,g=0,b=255] 
Value: 1 - java.awt.Color[r=0,g=51,b=204] 
Value: 2 - java.awt.Color[r=0,g=102,b=153] 
Value: 3 - java.awt.Color[r=0,g=153,b=102] 
Value: 4 - java.awt.Color[r=0,g=204,b=51] 
Value: 5 - java.awt.Color[r=0,g=255,b=0] 
Value: 6 - java.awt.Color[r=51,g=204,b=0] 
Value: 7 - java.awt.Color[r=102,g=153,b=0] 
Value: 8 - java.awt.Color[r=153,g=102,b=0] 
Value: 9 - java.awt.Color[r=204,g=51,b=0] 
Value: 10 - java.awt.Color[r=255,g=0,b=0] 

、問題はどちらかあなたは関数を呼び出す、またはあなたがをしているように、配列、それを使用している方法であると思われます戻る。

+0

あなたのテストのおかげで、それは仕事のはいですが、私はHSVスケールを持っています。つまり、赤 - >オレンジ - >黄 - >緑 - >シアン - >青です。私は追求し続ける... :) –

+0

'php hsv'をすばやくGoogleで検索すると、RGBとHSVの色空間の間にいくつかの変換関数が生成されます。 –

+0

はいHSVで変換する関数が見つかりました。しかし、私は自分の値をHSV形式に変換し、次にRGBに適切なグラデーションを持たせる必要があると思います... –