- 作品名:
- 「
二代目 カラリスト -本見 彩 」 - 作者名:
- はりまお
- 制作環境:
- Core i7-4770 3.40GHz + 8GB RAM
- Windows 10 Pro (64bit, 21H1)
- 開発言語:
- Visual Studio Community 2015 (Update 3)
- Visual Basic 2015
- WPFアプリケーション
- 動作環境:
- .NET Framework 4.5.2
- 形態種別:
- フリーソフトウェア(ソース同梱)
名前 | バージョン | 概容 |
---|---|---|
Colorist2.exe | 2.8.2.1 | 実行ファイル |
Colorist2.exe.config | アプリケーション構成ファイル | |
OutputFormat.tsv | 色ステータス出力定義ファイル | |
ReadMe.txt | 説明文(本文) | |
CreateNote.txt | 制作履歴 | |
Colorist | ソース フォルダ |
プログラミングをしていると(作者が)欲しくなる、いわゆるカラーピッカーです。
本作は、Windows Forms(以下、Winフォーム)用だった拙作『カラリスト 色見 本子』とそのお供『HSV飛行士』を融合し、Windows Presentation Foundation(以下、WPF)に向けて再構成したものです。
本作は、『.NET Framework 4.5.2』を必要とします。【○参考・引用文献/拝借物】に挙げたサイトを参考に、導入しておいてください。
ダウンロードした圧縮ファイル"Colorist2.zip"を、適当なフォルダに解凍してください。
インストールしたフォルダを丸ごと削除してください。
レジストリ不使用、且つファイル不生成なので、立つ鳥跡を濁さずでスッキリ消え去ります。
実行ファイル"Colorist2.exe"を、ダブルクリックすると起動します。ウィンドウの右上にある
で終了です。.NET Frameworkには、様々な色が定義されていて、色名索引 と 色カタログ に一覧されます。その中からいずれかをクリックすると、パレットがその色になります。
色名索引には、WPF向けの色名(Media.Color, Windows.SystemColors)が表示されます。
色カタログには、WPF向けに併せてWinフォーム向け(Drawing.Color, Drawing.SystemColors)やその他の色が、タブで分類されて並びます。
しすから手帳』が開き、系統を主体とした色の選択ができます。
系統別に並んだ名称一覧からいずれかを選べば、同じ色の全系統名が選択状態になるので、下に並ぶボタンから目的の系統をクリックしてください。
検索・直接入力 は、色名索引にある色(すなわちWPF用の色)の中から抽出したり、ARGBを色に変換したりできます。表示された結果から目当ての色をクリックすれば、パレットに反映されます。
検索できる内容は、以下の通りです。また、どの項目に該当するかも、以下の順に判断されます。
優先順位 | 種別 | 内容 | 例 | 動作 |
---|---|---|---|---|
1 | 近似色検索 | 先頭に"#"を付けた16進数のRGB。 | #123456 | 入力した値に近い順に並べられます。 数値は対象色との差を表します。 ※αチャンネルは無視されます。 ※結果に透過色は含まれません。 |
2 | 色名検索 | 名前にありそうな文字列。 | red | 入力した文字列を名前に含む色が抽出されます。 太字→先頭一致, 斜体→完全一致 |
3 | 直接入力 | 先頭に"-"または"+"を付けた10進数の整数。 | -16777216 | 入力した値に相当する色が表示されます。 ※αチャンネルを省いた場合はFFになります。 ※先頭に"0"を付けると色名検索による誤ヒットを防げます。 |
16進数のARGBまたはRGB。 | FF123456 123456 |
パレット には、HSVやARGBの調整項目が並んでいます。スライダのツマミを動かしたり、グラデーション部をクリックしたり、数値を入力したり、
ボタンは、押し続けると連続的に増減します。スライダ(ツマミ以外)をクリックしたり、 ボタンをクリックした時の増減量は、右端のスライダで調節できます。
現在調合している色は、パレット中央部に表示されます。任意に設定できる背景色と重なっているので、透過具合も確認できます。
コマンド には、幾つかの機能ボタンが並びます。色の加工・記憶・操作ができます。
ボタンを押すと、検索欄に色名またはカラーコード(色ステータス出力の先頭ボタンの内容)が複写されます。すなわち、色名索引や色カタログから選択した直後なら名前で、パレットで調色した後ならARGB値で、色を探せます。
ボタンの詳細は、別記します。
コマンドにある
ボタンを押すと、『色素 伝他朗』が現れます。この伝他朗を使うと、パレットのR,G,Bの各数値を外部アプリケーションへ送信できます。送信される数値は、ステータス欄でも確認できます。操作対象 | 操作内容 | |
---|---|---|
1 | 転送先アプリケーション | R欄をクリックしてアクティブする(※忘れがち!) |
2 | 色素 伝他朗 | 10進数で送信するか、16進数で送信するかを選択 |
3 | ボタンをクリック |
この機能は、キーボード操作をソフトウェア的に再現するもので、その具体的な内容は下記の通りです。ただし、条件を満たしていても、上手く行かない場合があるかもしれませんのであしからず。また、送信中は、マウスやキーボード等の操作を行わないに越したことはありません。
内容 | 操作 | |
---|---|---|
1 | 全選択 | Ctrl+A |
2 | R値を入力 | |
3 | フォーカス移動 | Tab |
4 | 全選択 | Ctrl+A |
5 | G値を入力 | |
6 | フォーカス移動 | Tab |
7 | 全選択 | Ctrl+A |
8 | B値を入力 | |
9 | フォーカスを2つ戻す | Shift+Tab 2回 |
色ステータス出力 には、色名に始まり様々な形式のARGB値やHSV値が並びます。これらのボタンをクリックすると、その文字列がクリップボードへコピーされます。
1つ目に色名が表示されるのは、色名索引や色カタログ等から選択した直後のみです。パレットの各チャンネルを操作すると、カラーコードに切り替わります。調合した色の名称を得たい場合は、近似色検索を行ってください。
配布物にはソースも収録しているので、自分好みに改造してもらって結構です。もちろん、その気がないならソースフォルダを削除しても構いません。
ソースを使用する上での注意を一つ。
ソースフォルダに"obj"フォルダを含めていないため、Visual Studioでソリューション(プロジェクト)を開いた直後の状態では、ユーザーコントロールを使用しているウィンドウのデザインを開けません。そこで、ソリューションを開いたら、とりあえずビルドしてください。"obj"フォルダが生成され、デザイナが使えるようになります。
コマンドライン引数を付けて実行すると、起動時の状態を変更できます。
/PALLET=調合色,背景色,下地色,記憶色 | |
機能 | パレットの色を指定する。 |
---|---|
調合色 | 色名またはARGB(32bit/16進数) |
背景色 | ARGB(32bit/16進数) |
下地色 | RGB(24bit/16進数/A無視) |
記憶色 | ARGB(32bit/16進数) |
例 | /PALLET=Red,FF123456,808080,40ABCDEF |
/STEP=数値 | |
機能 | パレットのチャンネル増減量を指定する。 |
数値 | 0〜32(整数) |
例 | /STEP=15 |
/SWITCH=フラグ | |
機能 | 検索オプションのチェックの有無を指定する。 |
フラグ | 0=無, 1=有(2bit/2進数) bit0 … bit1 … |
例 | /SWITCH=01 |
/VISIBLE=フラグ | |
機能 | 色カタログ[Windows.SystemColors]タブ内の各系統分類の展開を指定する。 |
フラグ | 0=閉, 1=開(4bit/2進数) bit0 … ブラシ系 bit1 … ブラシ系リソースキー bit2 … カラー系 bit3 … カラー系リソースキー |
例 | /VISIBLE=1010 |
/QUERY="文字列" | |
機能 | 検索クエリを指定する。 |
文字列 | 検索する内容 |
例 | /QUERY="blue" |
色ステータス出力に並ぶ2つ目以降の内容は、ファイル"OutputFormat.tsv"に定義されています。お好みに合わせて、追加・変更できます。
仕様は、下記の通りです。出力書式は、《String.Format》メソッドの複合書式設定文字列そのものなので、.NETの開発経験があれば何とかなると思います。「パラメータ不足!」と感じたなら、コードをいじってください。
ファイル形式 | TSV(Tab-Separated Values) | ||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
アイテム書式(レコード) | {出力書式}Tab{ToolTip文}改行 | ||||||||||||||||||||||||||||||||
出力書式のパラメータ |
|
Windows.SystemColorsクラスの中身を見ると、同じ色が少しずつ違う名前でいくつも存在していることに気付きます。これらは、様々な用途の色(コントロールの色、文字の色、等々)を、異なる使用場面毎に合わせた形(色を指定したい, 領域を塗り潰したい, コードビハインドで使いたい, XAMLで使いたい)で提供してくれているようです(おかしな認識だったらごめんなさい)。
大別すると、ブラシ系(名称の末尾が"〜Brush"でSolidColorBrushクラス), カラー系(名称の末尾が"〜Color"でColor構造体), 更にそれぞれに対応したリソースキー系(それぞれの名称の末尾に"〜Key"が付くResourceKeyクラス)があります。
このように、Windows.SystemColorsの要素名は、用途名と系統名の組み合わせになっているため、同色似名がひしめいてしまいます。この紛らわしさを少しでも軽減すべく、いろいろと策を講じてみました。
色カタログでは、見た目をスッキリさせるために、色チップを系統別に区分して、それぞれを隠せるようにしました。また、欲しい系統に迷わず到達するために、選んだ色から別の系統へ簡単に切り替えられる手帳を持たせました。
検索では、用途で絞り込めるように、入力された名称の末尾から系統名を取り除く機能をコンテキストメニューに設けました。(用途名も似たものが多いので、違う色も多数ヒットしてしまいますが…。)
(Windows.SystemColorsのためにこれだけの細工を要したのは、結局どの対策も決定打になっていないから。そもそも、ここまで心血を注ぐほどの出番がWindows.SystemColorsにあるんだかないんだか… (~3~)ゴニョゴニョ。)
パレットにあるグラデーションの中間色は自動生成されるため、色とスライダ位置が完全に一致しているかについては、作者の関知するところではありません。
HSVの各チャンネルは小数点以下がある値なので、RGBとの変換処理や表示桁数の都合で丸められます。よって、得られるRGBとHSVは、同じ色とは限りません。
16進数入力パッドの
普通にクリックすると、入力した文字列の先頭に"#"が付いたり消えたりします。入力した文字列を全選択するかCtrlキーを押しながらクリックすると、入力欄がクリアされ"#"だけになります。
色の近さは、R,G,Bを3次元座標X,Y,Zと見なして“2点間の距離”の公式を解くことで求めています。
これは、昔使用していた減色ソフト(タイトル失念、ごめんなさい)のReadMeに書かれていた手法に倣いました。
先代が持っていたメモ機能を、当代には持たせませんでした(企画段階では、色カタログにメモ用タブを設けるつもりでいた)。理由は単純で、作者自身が使い道を見いだせなかったから(お察しの通り、登録・整理・ファイル操作等々を作るのが面倒だっていうのも大)です。その代わり、一時記憶能力や分身の術を習得させました。
先代で、ほとほと手を焼いた問題に『色チップの前景色(色カタログに並ぶ四角形の文字の色)』があります。先代での紆余曲折は、そちらのReadMeを読んでもらうとして、簡単に書くと『背景に埋もれず読み易い文字にするには、何色で表示すれば良いか?』です。当代では、先代で学んだ真理「背景色が明るければ黒、暗ければ白」を踏襲しつつ、肝心要の明暗判定を“NTSC加重平均法”に変更しました。
NTSC加重平均法とは、人間の目の赤,緑,青に対する感度差を反映してグレースケール化する簡単な計算式です。カラー映像を白黒テレビに映す際に用いられたようなので、違和感の少ない結果が期待できます。
(おぼろげながら、先代でもNTSC加重平均法を試した記憶がある。そして、気に入らず捨てた気がする。それなのに素性の良い方法だからと再登板させて「こんな簡単な処理でこの結果なら十分使える」と思ってしまった…この変心、もしや老い!?)
ただ、この方法(先代も含め)では透明度を扱えないので、透明色のRGB値(透明と言っても実は色がある)と背景(色チップが並ぶパネル)の色との兼ね合によっては紛れてしまいます。そんな時は、パレットの背景色を変更してみてください。
Winフォームでは簡単に実現できていた“フォーカスを得ないウィンドウ”や“外部へのキーストローク送信”ですが、WPFでは同じやり方が通用しないので、Win32 APIで実装しました。
(個人的には、APIを直接叩くのは好かんので、マネージドコード(メソッド)にラップしてくれると有り難い…いやいや、それをやったのがWinフォーム。WPFに装備されなかった時点で望むべくもない。もしかして「WPFからもWinフォーム側の機能を呼び出せばよい」というのが、Microsoftの意向なのか? でも、そちら側への参照がされていない所を見ると、「使ってくれるな」っていう雰囲気…。はてさてどうすりゃいいのやら? UWPなら万事解決?)
タブにMSXの色があるのは、作者の完全な趣味です。これらのRGB値は、MSXPLAYer(MSXマガジン永久保存版3)の色を基にしています。
先輩の本子さんはできなかったのに、新人の彩ちゃんはサクッとこなしちゃうこと、それが“HSV”…なんだけどぉ (?_?)ゝムム。
例えば、ある色を「明くしたい」「暗くしたい」って思ったらどうするか? ド素人な作者は、RGBの各チャンネルを同じだけ増減しちゃう。だって、それしか知らないから。
ある日、暗い黄色が欲しくて、素直にYellow(FFFF00)でやってみた…き、汚い ('д'ii)。
「こんなんじゃな〜い @`ム´@」と駄々をこねている所に希望の光を灯してくれたのが、彩度や明度を直感的に弄れる“HSV色空間”!! この眩しい出会いにチカチカしながら再び黄色に挑むも…見事、RGBと同じ結果に ヽ(゚、。)ノドテ。なんだかなぁ、オレンジも思った色にならんよなぁ。色を創るって難しぃなぁ (;´д`)トホホ。
ちょっとちょっと、HSVと言えば、先代には『HSV飛行士』って付き人がいたでしょ?
そう、本子の時代に、HSVとの融合を目論んでいたのだ。そして、HSV色空間を扱うために産み出されたユーザーコントロールこそが、HSV飛行士の正体だったわけ (@o@!!。
そこまでできていて何で、別離なんてことに?
このコントロールは、HSV飛行士を見ればわかるように、四角形の彩明度領域(SV)を色相環(H)が取り巻く典型的な構成。彩明度領域で拾える値の精度を0.01としたので、この部分の最小寸法は101*101ドット。それに色相環に数値類にラベル類に余白やなんやかんや。単体で見ればイイ感じに育成できたと、勢い込んで本子さんのパレットに納めてみる…あれ? ギュ〜ギュ〜押し込んでみる… アワ(((゚д゚;)))ワワ …。すっかり成熟した(できあがっていた)本子さんには、思いの外デカかったようで、上手く(作者が気に入るように)配置できなかった (´Д⊂グスン。
“RGBでもHSVでも同じ”という絶望の闇に包まれて、なお、本子さんに肉体改造を強いるのは酷というもの(いや、作者自身が辛い)。けど、このままお蔵にするのは惜しいと、サテライト(おまけ)としての体裁だけ整えてお茶を濁したというのが事の顛末。
それから月日は流れて…。
アプリケーションのスケーリングを検討するというお題目でWPFの調査に入ったところ、WPFは“コントロール単位で簡単スケーリング”かつ“データバインディング”な賢い奴だと発覚してしまう。そうすると「この仕組みを使えばカラリストのコードが超簡素化しちゃう上に、半ば諦めていたHSVまでもがねじ込めちゃうかも (=w=)ウシシ」という企みが沸々と湧いて来てしまう。そして、HSV色空間は○と□で表現しなくちゃいけないなんて決まりはないんだと思い当った時(正確には、色相HのグラデーションもXAMLで簡単に描けるんだと思い知った時)、我がゴーストは「カラリストの新人発掘(新規作成)なんてお茶の子さいさい q(^v^)p♪」と呟いてしまう。これが事の始まり。
この考えが綿菓子の様に甘々スカスカだったことは、『ウチの子、ナン分?』のReadMeで触れた通り。とは言え、すっからかんの知識ながらも 〜欲しい結果は得られる〜 所までこぎつけたんだから、「継続は力なり」ってやつかな \(^0^)/ワーイ。