今回はカラーコードメーカーをつくります。
WEB色見本 原色大辞典 – HTMLカラーコード
https://www.colordic.org/
こんなサイトもありますが、自分でRGBの値を設定して色を作り、ファイルに保存するアプリをつくります。
まずデザイナで以下のようなものをつくります。ラベルとボタン、ピクチャーボックス、トラックバーを配置します。
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 |
public partial class Form1 : Form { private void trackBarRed_Scroll(object sender, EventArgs e) { ShowColorValue(); pictureBox0.BackColor = GetColor(); } private void trackBarGreen_Scroll(object sender, EventArgs e) { ShowColorValue(); pictureBox0.BackColor = GetColor(); } private void trackBarBlue_Scroll(object sender, EventArgs e) { ShowColorValue(); pictureBox0.BackColor = GetColor(); } void ShowColorValue() { int red = trackBarRed.Value; int green = trackBarGreen.Value; int blue = trackBarBlue.Value; labelRedD.Text = red.ToString(); labelGreenD.Text = green.ToString(); labelBlueD.Text = blue.ToString(); if (checkBoxUpper.Checked) { labelRedX.Text = red.ToString("X2"); labelGreenX.Text = green.ToString("X2"); labelBlueX.Text = blue.ToString("X2"); } else { labelRedX.Text = red.ToString("x2"); labelGreenX.Text = green.ToString("x2"); labelBlueX.Text = blue.ToString("x2"); } labelColor.Text = String.Format("#{0}{1}{2}", labelRedX.Text, labelGreenX.Text, labelBlueX.Text) ; } Color GetColor() { int red = trackBarRed.Value; int green = trackBarGreen.Value; int blue = trackBarBlue.Value; return Color.FromArgb(red, green, blue); } } |
TrackBarがスクロールされたら値を取得、Color.FromArgbメソッドで色をつくり、ピクチャーボックスに表示させます。また赤、緑、青の値の表示とカラーコードも表示します。大文字、小文字の切り替え(#FFFFFFか#ffffffか)もできるようにしました。
保存ボタンが押されたら、色を保存します。
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 |
public partial class Form1 : Form { private void button1_Click(object sender, EventArgs e) { SaveColor(pictureBox1, label1); } private void buttonSave2_Click(object sender, EventArgs e) { SaveColor(pictureBox2, label2); } // 他、省略 void SaveColor(PictureBox box, Label label) { string red = ""; string green = ""; string blue = ""; if (checkBoxUpper.Checked) { red = trackBarRed.Value.ToString("X2"); green = trackBarGreen.Value.ToString("X2"); blue = trackBarBlue.Value.ToString("X2"); } else { red = trackBarRed.Value.ToString("x2"); green = trackBarGreen.Value.ToString("x2"); blue = trackBarBlue.Value.ToString("x2"); } box.BackColor = GetColor(); label.Text = "#" + red + green + blue; } } |
それからコピーボタンがおされたらカラーコードをクリップボードに転送するようにしました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
public partial class Form1 : Form { private void buttonCopy1_Click(object sender, EventArgs e) { CopyColor(label1); } private void buttonCopy2_Click(object sender, EventArgs e) { CopyColor(label2); } // 他、省略 void CopyColor(Label label) { if (label.Text.Length > 0 && label.Text.Substring(0, 1) == "#") Clipboard.SetText(label.Text); } } |
そしてファイルに保存して読み出せるようにします。
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 |
public partial class Form1 : Form { private void MenuItemSaveFile_Click(object sender, EventArgs e) { SaveFileDialog dialog = new SaveFileDialog(); dialog.Filter = "Color Files (.color)|*.color"; dialog.DefaultExt = ".color"; DialogResult dr = dialog.ShowDialog(); if (dr != DialogResult.OK) return; List<int> rgbs = new List<int>(); rgbs.Add(pictureBox1.BackColor.ToArgb()); rgbs.Add(pictureBox2.BackColor.ToArgb()); rgbs.Add(pictureBox3.BackColor.ToArgb()); rgbs.Add(pictureBox4.BackColor.ToArgb()); rgbs.Add(pictureBox5.BackColor.ToArgb()); rgbs.Add(pictureBox6.BackColor.ToArgb()); rgbs.Add(pictureBox7.BackColor.ToArgb()); rgbs.Add(pictureBox8.BackColor.ToArgb()); var xml = new System.Xml.Serialization.XmlSerializer(typeof(List<int>)); var sw = new System.IO.StreamWriter(dialog.FileName); xml.Serialize(sw, rgbs); sw.Close(); } private void MenuItemOpenFile_Click(object sender, EventArgs e) { OpenFileDialog dialog = new OpenFileDialog(); dialog.Filter = "Color Files (.color)|*.color"; DialogResult dr = dialog.ShowDialog(); if (dr != DialogResult.OK) return; var xml = new System.Xml.Serialization.XmlSerializer(typeof(List<int>)); var sr = new System.IO.StreamReader(dialog.FileName); List<int> rgbs = (List<int>)xml.Deserialize(sr); sr.Close(); SetColor(rgbs[0], pictureBox1, label1); SetColor(rgbs[1], pictureBox2, label2); SetColor(rgbs[2], pictureBox3, label3); SetColor(rgbs[3], pictureBox4, label4); SetColor(rgbs[4], pictureBox5, label5); SetColor(rgbs[5], pictureBox6, label6); SetColor(rgbs[6], pictureBox7, label7); SetColor(rgbs[7], pictureBox8, label8); } void SetColor(int argb, PictureBox box, Label label) { Color color = Color.FromArgb(argb); box.BackColor = color; if(checkBoxUpper.Checked) label.Text = String.Format("#{0}{1}{2}", color.R.ToString("X2"), color.G.ToString("X2"), color.B.ToString("X2")); else label.Text = String.Format("#{0}{1}{2}", color.R.ToString("x2"), color.G.ToString("x2"), color.B.ToString("x2")); } } |