2016-12-27 16 views
0

GTKを使ってrgbを16進数に変換するには?GTKを使ってrgbを16進数に変換するには?

gdk_rgba_parse (GdkRGBA *rgba, const gchar *spec);を使用して16進数からrgbに変換できますが、その逆はできません。

+0

私はGTK +にこれを行うための専用の機能がないと思います。ただし、必要に応じてコンポーネントを0..255にスケールし、 '%02X'フォーマットを使用して結果の文字列を動的にフォーマットするには' g_strdup_printf() 'を使用します。あなたも同様にそれを選択すれば 'char [8]'に手でこれを行うことができます。 'GdkRGBA'は[0,1]の範囲の浮動小数点コンポーネントを使います。これを0..255にするには単純に255を掛けて整数に切り捨てます。 – andlabs

+1

@andlabs 255.0ではなく、スケーリングが '255.999 ...'だったら? 1.0より小さい値を255にマッピングすることができます.IOWは、* 255、[0.0000 ... 0.0039]を0にマップします。[0.0040 ... 0.0078]は1、... [0.9961 .. .0.9999]は254にマッピングされますが、[1.000]だけが255にマッピングされます。 '* 255.999 ... 'では、マッピングはほぼ等しく分割されます。または、おそらく '(int)(rgba.red * 255 + 0.5/255)' _rounded_色を取得するには? – chux

+0

@chux興味深い;私はこれについて考える必要があります... – andlabs

答えて

1

は手動でこれを行うことができます。

sprintf(spec, "#%02X%02X%02X", (int)(rgba.red*255), (int)(rgba.green*255), (int)(rgba.blue*255)); 

は、文字列を保持するか、代わりにg_strdup_printfを使用するのに十分な大きさのバッファを提供するようにしてください。

+0

'%X'でそれらを使用するには、それらの乗算を' unsigned int'にキャストする必要があります。 – andlabs

+0

@andlabsあなたが正しいです。ヒントをありがとう。私は私の答えを更新しました。 – Gerhardh

+0

ありがとう!注:カンマを忘れてしまった。 – Lorhan

関連する問題