WPF色一覧表示してHSVで並べ替えするアプリできた
WPF色一覧表示と並べ替え
System.Windows.Media.Colorの中の色一覧を表示
並べ替えは
色の名前順(昇順ソート)
H:色相(昇順ソート)
S:彩度(昇順ソート)
V:明度(降順ソート)
YUVのY:輝度(降順ソート)
一覧マスをクリックで色の詳細表示と見本枠の背景色変更
一覧マスにマウスカーソルを乗せると見本枠の文字色変更
Transparentは無色透明で色じゃないけどそのまま入っていて、Whiteと同じような扱いになっている
一覧のTomatoをクリックしたところ
右にTomato色の詳細表示
#FFFF6347は16進数でARGBの順番
一覧のOliveにマウスカーソルを乗せたところ
右下の文字色がOliveになる
並べ替え
色相順
名前順→色相順
名前順→明度→色相
色相が全く同じ色が複数あるからで
色相0は9色もあって左上のRedからMaroonまでがそう
彩度順
名前順→彩度順
名前→色相→明度→彩度
明度順
名前順→明度順
名前順→色相→明度
輝度順
デザイン画面
MainWindow.xaml
MainWindow.xaml.cs
RGBからHSVの変換は以前作ったDLLを使うので参照に追加して
using MyHSV(16行目)している
17行目のusing System.Reflectionは
System.Windows.Media.Colorにある色全部を取得するのに使っている
Colorsの名前付きの色全部取得
これを全部取得したい
取得できた
Colors.Red;とかの中にカーソルを置いてF12キー押すと
Colorsクラスの中みたいなのが表示される
色の名前が並んでいて、それはpublic staticってのがわかる
Type t = typeof(Colors);
PropertyInfo[] infos = t.GetProperties(BindingFlags.Public | BindingFlags.Static);
色の情報を一覧表(テーブル)にする
HSVそれぞれの要素でソートしたかったので、1色ごとの情報を入れておくクラスを作って
これだけなら構造体でもいい気もするけど、どうなんだろ
MyItemを全部の色分作って、それを入れておくリスト(テーブル)をフィールドで用意して
MyTable
MyTableにMyItemを入れていく
MyTableの中
HSVの値も入った
順番は名前順なので先頭はAliceBlue
並べ替え
色相順で並べ替えしたMyTableの中
先頭の色が色相245のAliceBlueから色相0のBrownに変わっている
並べ替えはOrderByメソッド
MyTableを色相順で並べ替え(ソート)
MyTable = MyTable.OrderBy(a => a.HSV.Hue).ToList();
OrderByってのが昇順ソートで降順ソートしたいときはOrderByDescending
MyTable = MyTable.OrderByDescending(a => a.HSV.Hue).ToList();
MyTable.OrderBy(a => a.HSV.Hue)
これのaは変数みたいなものでbでもcでもxでもいいしitemとかでもいい
これにMyTableの要素一つ一つが順番に入って処理されていく感じかなあ
MyTable.OrderBy(a => a.
ここまで入れると入力候補が出てくるのでソートの基準にしたいのを選ぶ
今回は色相(Hue)なので
MyTable.OrderBy(a => a.HSV.Hue)
これでソートされたものが出てくる、ソートされるんじゃなくて出てくるので
var sorted = MyTable.OrderBy(a => a.HSV.Hue);
ってするとソートされたものが受け取れる
でもこれだと
OrderedEnumerableっていうよくわかんない型になっているので
最後にToList();を付けて元のリストの形にしている
連続ソート
MyTable = MyTable.OrderBy(a => a.HSV.Hue).OrderBy(a => a.Name).ToList();
色相でソートされた状態から名前でソートされる
今回は使っていないけど、こういうのもできるんだねえ
並べ替えのOrderByとかはLINQ関係なんだろうけど、使えると便利だねえ
これがForとIfの組み合わせで同じことをしようとすると何十行にもなりそうなのを1行でできる
ただ、=>とかのラムダ式と相まって難しい、またすぐ忘れそう
色のマスをクリックしたときに詳細を表示するところ
それでも目的のColorsの色一覧をHSVで並べ直して表示ってのは達成できた!
以前に作ったRGBをHSVに変換するDLLを利用できたのも良かった
参照したところ
色一覧取得
C#でColorの値をリストアップしてみる - takoashiの開発記録
http://d.hatena.ne.jp/takoashi_net/20080818/1219028584
【C#】定義済みColorの色名と色一覧 - 中の下の上の真ん中あたり
http://arikalog.hateblo.jp/entry/2013/12/02/215401
WPF 色の名前と色の表示 その2: C# プログラミング 再入門いつかはこんなふうに書けるようになりたいねえ
http://dotnetcsharptips.seesaa.net/article/434274231.html
並べ替え
C# リストで複数キーを指定したソート方法 | システム開発・Web制作・システム運用・技術者派遣なら株式会社スリーエスシステム&サービスここのがすごい参考になった
http://www.3s-sys.co.jp/blog/2017/03/15/1195/
Listの要素を並べ替えるには?[C#/VB]:.NET TIPS - @IT
http://www.atmarkit.co.jp/ait/articles/1703/22/news023.html
[LINQ] クエリ式の基本(from, select) | HIRO's.NET Blog
http://blog.hiros-dot.net/?p=5083
ダウンロード
アプリ
ここのWPF.zipがそれ
RGB→HSVのDLL
関連記事
2018/2/20
WPF、Color(RGB)とHSVを相互変換するdll作ってみた、オブジェクトブラウザ使ってみた ( ソフトウェア ) - 午後わてんのブログ - Yahoo!ブログ
https://blogs.yahoo.co.jp/gogowaten/15380324.html
2018/2/18
dllファイル(クラスライブラリ.NET framework)の作り方と使うまでの手順メモ ( ソフトウェア ) - 午後わてんのブログ - Yahoo!ブログ
https://blogs.yahoo.co.jp/gogowaten/15377219.html