質問
グレースケール値(0-255)をRGB値/表現に変換するにはどうすればよいですか? これはSVG画像で使用するためのもので、グレースケールをサポートしていないようです。RGBのみです。
注:これはRGBではありません->グレースケール。別の質問で既に回答されています。 RGBをグレースケール/強度に変換)
解決
迅速かつダーティなアプローチは、RGBの各コンポーネントのグレースケール強度を繰り返すことです。したがって、グレースケール120がある場合、RGB(120、120、120)に変換されます。
得られる実効輝度は、使用しているデバイスのR、G、Bサブピクセルの実際の輝度に依存するため、これは迅速で汚れています。
他のヒント
変数にグレースケール値があり、0x00RRGGBBの形式で新しい値を生成する場合、簡単な方法は次のとおりです。
int rgb = grey * 0x00010101;
または選択した言語の同等物。
グレースケールのRGBへの変換は簡単です。単にR = G = B =グレー値を使用します。基本的な考え方は、色(RGBの観点でモニターに表示される)は付加的なシステムであるということです。
http://en.wikipedia.org/wiki/Additive_color
したがって、赤を緑に追加すると黄色になります。そのミックスに同じ量の青を追加すると、中間色になります。 [赤、緑、青] = [255 255 255]で完全にすると、白になります。 [0,0,0]はモニターを黒にします。 R = G = Bがすべて等しい中間値は、指定されたグレーレベルの名目上中立な色を生成します。
軽微な問題は、色の表示方法によって異なり、完全にニュートラルではない場合があります。これは、モニター(またはプリンター)の調整方法によって異なります。この時点から、色彩科学の興味深い深さを探ることができます。ここでやめます。
グレースケールは、すべての値が同じ強度を持つことを意味します。すべてのチャネル(RGB)をグレー値に等しく設定すると、RGB白黒画像が得られます。
ピクセルごとにR、G、Bを同じ値(グレースケール値)に設定すると、正しいグレーのシェードが得られませんか?
また、私のソリューション RGB8画像をRGB32画像に変換する高速アセンブリ最適化方法。グレーチャンネルは、他のすべてのチャンネルで単純に繰り返されます。
目的は、x86 / SSEを使用した変換の高速化可能なソリューションを見つけることでした。