Haskell で gtk2hs を使用していますが、答えが見つからない問題に遭遇しました。
私は非常に単純なプログラムを書いています: それは色の値 (または複数の色の値) を取り、それらに関数を適用します。補色、色のセットの平均などを行うことができます。Glade でのインターフェイスの組み立てが完了し、gtk2hs の使用に関するいくつかの簡単なチュートリアルを読みました。これまでのところすべてが機能しており、プログラムを実行するとインターフェイスが表示されます。
ただし、私の問題はColorSelection
ウィジェットにあります。そこから値を取得すると、それが与える値はタイプColor Word16 Word16 Word16
であり、それぞれが0から65535の間です。私ができるようにしたいのは、理想的にはそれWord16
を16進数のトリプレットに変換することです。String
Hexトリプレットに変換できます。これまでのところ、色が HTML スタイルの rrggbb ではなく、rrrrggggbbbb として保存されているという事実と関係があるように思われることがわかりました。このコードを使用して、私が見つけたもの:
colorToHex (Color a b c)
= (showHex a "") ++ " " ++ (showHex b "") ++ " " ++ (showHex c "")
ほとんどの場合は正確ですが、カラー ピッカー ツールを使用すると、出力された色とは異なるように見える色を入力できます。たとえば、カラー ピッカーを使用して選択しました#A9D06E
が、関数は を返し"aa11 d12d 6e41"
ました。かなり近い関係ですが、関係を理解することはできません.この例では、赤のチャネルの丸めはどのように機能しますか? また、16 進数値#A9D06E
を直接入力すると、"a9a9 d0d0 6e6e"
.
Colour
Hoogle を使用して、 aを aに変換する関数String
、または aを他のものに変換する関数を見つけようとしました。またColour
、Hackage で Gtk パッケージのドキュメントを検索しましたが、私が望んでいたことを行うものは何も見つかりませんでした。Colour
私もインターネットを検索しましたが、タイプの扱いについてはあまり見つかりませんでした。ここの下部にある、まさに私が望んでいたことを行うための関数が1つ見つかりました。ただし、これには同じ問題があり、カラー ピッカー自体が特定の選択に対して与えた値と同じ値を与えません。
更新 1
また、値をビットシフトしてみました。ほとんどの場合、8 ビットでシフトすると正しい値が得られますが、私が試した他のことによると、わずかにずれていることがよくあります。