web-dev-qa-db-ja.com

グレースケール値をRGB表現に変換しますか?

グレースケール値(0〜255)をRGB値/表現に変換するにはどうすればよいですか?これは、SVG画像で使用するためのもので、グレースケールのサポートが付属していないようで、RGBのみです...

注:これはRGB->グレースケールではなく、別の質問ですでに回答されています。 RGBをグレースケール/強度に変換

23
Rabarberski

素早いアプローチは、RGBの各コンポーネントに対してグレースケール強度を繰り返すことです。したがって、グレースケール120がある場合は、RGB(120、120、120)に変換されます。

得られる実効輝度は、使用しているデバイスのR、G、およびBサブピクセルの実際の輝度に依存するため、これは迅速かつ不正確です。

31
Ates Goral

変数にグレースケール値があり、0x00RRGGBBの形式で新しい値を生成する場合、これを行う簡単な方法は次のとおりです。

int rgb = grey * 0x00010101;

または選択した言語で同等のもの。

28
izb

グレースケールからRGBへの変換は簡単です。単にR = G = B =グレイ値を使用します。基本的な考え方は、色(RGBに関してモニターで見た場合)は加法システムであるということです。

http://en.wikipedia.org/wiki/Additive_color

したがって、緑に赤を加えると黄色になります。そのミックスに青を等量で加えると、中間色が得られます。 [赤、緑、青] = [255 255 255]を完全にオンにすると、白になります。 [0,0,0]はモニターを黒にします。中間値は、R = G = Bがすべて等しい場合、指定されたレベルのグレーの名目上ニュートラルな色になります。

マイナーな問題は、色の見え方によって異なりますが、完全にニュートラルではない場合があります。これは、モニター(またはプリンター)の調整方法によって異なります。この時点から、色科学には興味深い深みがあります。ここでやめます。

11
user85109

グレースケールは、すべての値が同じ強度であることを意味します。すべてのチャネル(RGB)をグレー値に等しく設定すると、RGB白黒画像が得られます。

7
Erik

各ピクセルでR、G、Bを同じ値(グレースケール値)に設定しないと、正しいグレーシェードが得られませんか?

4
jlew

また、私のソリューション Faster Assemblyに最適化された方法で、RGB8画像をRGB32画像に変換することもできます 。灰色のチャネルは、他のすべてのチャネルで単純に繰り返されます。

その目的は、x86/SSEを使用して変換するための可能な高速化ソリューションを見つけることでした。

0
bkausbk