JUGEM 無料ブログ
ブログをはじめる GMOペパボ株式会社

反対色を作る~カラーパレット(リストボックス)の文字色を見やすくする

  • 2011.10.13 Thursday
  • 18:07

カラーリスト(パレット 色見本)のような物をリストボックスを使って、作ろうと考える。

リストボックスの描画は、おなじみDOBON.NETにあるので、
これをリストの背景を該当の塗りつぶして、色名称(色の名前)を表示する感じに応用する。


問題は、表示する色名称、文字列の色。
同じ色では見えないし、適当な固定色をあてたとしても、
色によっては、見える見えないが発生してしまう。

なので、単純に考えて、パレット色に対して見やすい(反対の)色にするのがいいというのが、今回の話題。


探していたら、「背景色から文字色を算出したい」という内容の投稿があった。

要するに、明度差を求めて、結果が125以上(上のソースでは127.5)で
黒か白かを分ける感じである。

VB2008に翻訳すると、

 

Public Function ToBackColor(ByVal Source As Color) As Color
‌ 
    Dim bColor As Single = CSng(Source.R * 299+ Source.G * 587+ Source.B * 114I) / 1000.0F
‌ 
    If bColor > 127.5Then
        Return Color.Black
    Else
        Return Color.White
    End If
‌ 
End Function


という感じである。

リストボックスに適用してみると


反対色

白黒以外を計算で求めることもできるのだが、
見た目にも白黒が一番はっきりしている感じだ。

追記
たまに、このページが検索されるのだが、
この記事は、反対と言うよりも、背景色から適当な色を割り出すと行った感じの記事なので、
反対色で調べた方はちょっと内容が違うと思われたに違いない。

反対色、いわゆる補色の計算式についてさらに調べると、次のページを見つけた。

補色のRGB値を計算する

こちらの式はイラストレータで使われている補色式のようです。

VBでざっくり書くと

 

Dim nR As Int32 = Source.R
Dim nG As Int32 = Source.G
Dim nB As Int32 = Source.B
‌ 
Dim nX As Int32 = Math.Max(Math.Max(nR, nG), nB)
Dim nY As Int32 = Math.Min(Math.Min(nR, nG), nB)
Dim nZ As Int32 = nX + nY
‌ 
Dim nClr As Color = Color.FromArgb(nZ - nR, nZ - nG, nZ - nB)


ってところでしょうか。
ついでに、反転は

 

Dim nR As Int32 = &HFF - Source.R
Dim nG As Int32 = &HFF - Source.G
Dim nB As Int32 = &HFF - Source.B
‌ 
Dim nClr As Color = Color.FromArgb(nR, nG, nB)


という感じ。

実行結果
反対色


参考
ListBoxの項目を自分で描画する
背景色から文字色を算出したい
文字色と背景のコントラスト

補色のRGB値を計算する
カラーの反転色または補色への変更

 

 

 

 

  • 0
    • 今さら聞けないプログラミング
    • comments(0)
    • trackbacks(0)
    • -
    コメント
    コメントする








        
    この記事のトラックバックURL
    トラックバック

    calendar

    S M T W T F S
         12
    3456789
    10111213141516
    17181920212223
    2425262728  
    << February 2019 >>

    search this site.

    よく使う、検索される投稿

    categories

    アマゾン

    楽天

    selected entries

    archives

    recent comment

    • iPhoneの着信音を新しいiPhoneに移動する
      iPhone 着信音 作成 (12/24)
    • MacでBlu-ray編 ~ BD-Rを焼く その4 無料のライティングソフトを使ってみる編
      rockecco (12/03)
    • あの、クラスとかメソッドとかプルダウンできるバーって~Visual Studio 2015
      rockecco (12/03)
    • MacでBlu-ray編 ~ BD-Rを焼く その2
      rockecco (12/03)
    • あの、クラスとかメソッドとかプルダウンできるバーって~Visual Studio 2015
      やま (11/29)
    • MacでBlu-ray編 ~ BD-Rを焼く その4 無料のライティングソフトを使ってみる編
      ブルーレイ 書き込み (11/20)
    • MacでBlu-ray編 ~ BD-Rを焼く その2
      ブルーレイ 焼く (11/13)
    • プリンセスパフュームのキーがいくつ出るか考えてみる
      Y. U. (11/09)
    • プリンセスパフュームのキーがいくつ出るか考えてみる
      rockecco (11/08)
    • プリンセスパフュームのキーがいくつ出るか考えてみる
      Y. U. (11/08)

    recent trackback

    profile


    ※当ブログはリンクフリーですが、 取材や雑誌等で掲載される場合は、事前にお知らせください

    others

    mobile

    qrcode

    powered

    無料ブログ作成サービス JUGEM