上位システムからDMXライトをコントロールしたい。RGB 値 0 ~ 255 しか受信しません。DMX ライトには、赤、緑、青、およびアンバーのライト (0-255) があります。RGB を RGB + Amber に変換するにはどうすればよいですか?
ライトを手動で調整しようとしましたが、メモリが限られているため、変換テーブルはオプションではありません。ありがとう。R
光の中には、さまざまな色空間があります。各色空間は、「次元」に沿って色を組み合わせると混合色になるような次元空間です。
RGB は、赤、緑、青のさまざまな値を混合できることを意味します。琥珀はすでに混合物であるため、RGB に「琥珀を追加」するには、赤、緑、青の値を調整して、もう少し琥珀色に見えるようにする必要があります。
琥珀は #FFBF00 または (RGB: 255, 191, 0) であるため、最初のステップは、RGB 値が「琥珀」の量を把握することです。たとえば、(RGB: 128, 80, 0) は 50% がアンバーで、0% がその他です。
琥珀のパーセンテージを把握できたら、「琥珀を引き出して」、残りの琥珀以外の色を RGB に残すことができます。次に、RGBAmber 色空間を持つことができます。
RGB をオーバードライブできないことに注意してください。したがって、(RGBAmber: 50%, 20%, 0%, 100%) を追加すると、RGB(100%, ...) に変換されます。赤を他の色と同じくらい大きくして、琥珀色が少しずれているように見せます。
実際には、これは琥珀の 4 番目の次元の構成に適切に近似します。しかし、それは正しくありません。実際のところ、他の 3 つの要素から 4 番目の次元を完全に構築することはできません。赤、緑、青の物理的な混合は、琥珀チャネルが生成するものとは異なるためです。たとえば、すべてのチャネルで RGBAmber を 100% で駆動することは完全に有効ですが、RGB は決してそれを行うことはできません。100% で琥珀を駆動すると、すべての赤チャネルが事実上ゼロになります。
琥珀は #FFBF00 または (RGB: 255, 191, 0)
char amber = (floor(255.0f*(R*1.0f+G*.749f)/446.0f))
計算のこの部分は、琥珀色のスケーリングを実行します。
(R*1.0f+G*.749f)/446.0f) and results in a value range 0.0f...1.0f
計算のこの部分は、0...255 へのスケーリングを実行します。
255.0f*
計算のこの部分は、分数を削除します
(floor(....)
おそらく、生成される範囲は 0 ~ 254 になりますが、シンプルで使いやすいものにするには、十分に近い値にする必要があります。