.NET(Framework, Core, Standard)で生成できるすべての色を生成するプログラムを作成します。
プログラムは、Windowsフォームアプリケーションで作成します。
フォームにリストビューを配置して、生成した色の一覧を表示します。
ユーザーインターフェース
Visual StudioでWindowsフォームアプリケーションを作成します。
フォームにListViewを配置します。
ソースコード
フォームのロード時に色の一覧を生成して、リストビューに表示する処理を実装します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 |
using System; using System.Drawing; using System.Windows.Forms; namespace WindowsFormsApp1 { public partial class Form1 : Form { // コンストラクタ public Form1() { InitializeComponent(); } // OnLoadメソッドのオーバーライド protected override void OnLoad(EventArgs e) { base.OnLoad(e); // コンボボックスの設定 this.comboBox1.DropDownStyle = ComboBoxStyle.DropDownList; ColorIncrement[] colorIncrements = { new ColorIncrement { Value = 1, Display = "16777216色" }, new ColorIncrement { Value = 3, Display = "636056色" }, new ColorIncrement { Value = 5, Display = "140608色" }, new ColorIncrement { Value = 15, Display = "5832色" }, new ColorIncrement { Value = 17, Display = "4096色" }, new ColorIncrement { Value = 51, Display = "216色" }, new ColorIncrement { Value = 85, Display = "64色" }, }; this.comboBox1.ValueMember = "Value"; this.comboBox1.DisplayMember = "Display"; this.comboBox1.DataSource = colorIncrements; this.comboBox1.SelectedIndex = 5; // リストビューの設定 this.listView1.Columns.Add("色の名前"); this.listView1.Columns.Add("Colorオブジェクト"); this.listView1.Columns.Add("HTMLカラーコード"); this.listView1.View = View.Details; // すべての色を生成 this.GenerateAllColor(); // コンボボックス選択値変更イベント this.comboBox1.SelectedValueChanged += ComboBox1_SelectedValueChanged; } // コンボボックス選択値変更イベントのメソッド private void ComboBox1_SelectedValueChanged(object sender, EventArgs e) { try { if (this.comboBox1.SelectedValue == null) { return; } // すべての色を生成 this.GenerateAllColor(); } catch (Exception ex) { MessageBox.Show(ex.Message); } } // すべての色を生成 private void GenerateAllColor() { // 色のインクリメント(インターバル) int increment = (int)this.comboBox1.SelectedValue; // リストビューのアイテムをクリアー this.listView1.Items.Clear(); // 赤 for (int red = 0; red < 256; red += increment) { // 緑 for (int green = 0; green < 256; green += increment) { // 青 for (int blue = 0; blue < 256; blue += increment) { // リストビューのアイテムの背景色 Color backColor = Color.FromArgb(red, green, blue); // リストビューのアイテムの前景色 Color foreColor = Color.FromArgb( this.ConvertForeColorRGB(backColor.R), this.ConvertForeColorRGB(backColor.G), this.ConvertForeColorRGB(backColor.B) ); // 色の名前 string name = backColor.Name; // HTMLカラーコード string html = ColorTranslator.ToHtml(backColor); // リストビューに追加するアイテムを生成 ListViewItem item = new ListViewItem(name); // リストビューのアイテムの設定 item.SubItems.Add(backColor.ToString()); item.SubItems.Add(html); item.ForeColor = foreColor; item.BackColor = backColor; item.Font = SystemFonts.CaptionFont; // リストビューにアイテムの追加 this.listView1.Items.Add(item); } } } } // RGB値を反転して前景色に変換 private int ConvertForeColorRGB(byte value) { return value <= 128 ? value + 127 : value - 127; } // 色のインクリメント(インターバル) private class ColorIncrement { public int Value { get; set; } public string Display { get; set; } } } } |
すべての色を作成すると16777216色になります。
16777216色のColorオブジェクトをすべて生成すると処理時間が長くなるので、今回は色数を落として作成できるようにします。
16777216色、636056色、140608色、5832色、4096色、216色、64色の7つパターンを選択して生成できるように、0~255までRGBの値をインクリメントする数値をドロップダウンリストに設定します。
色の生成では、赤(R)緑(G)青(B)のそれぞれの値を、0からインクリメントして255まで設定します。
設定した赤(R)緑(G)青(B)の値をもとに、Color構造体のFromArgbメソッドでColorオブジェクトを生成します。
プログラムの実行
プロジェクトをビルドして実行(デバッグ)します。
色が生成されてリストビューに一覧が表示されます。
ドロップダウンリスト(コンボボックス)の色数を変更してみます。
リストビューのカラーの一覧が再生成されて更新されます。