アイコンエディタをつくってみました。このままでは「四角い車輪の再発明」です。
ピクチャーボックスを縦横32列に並べています。またピクチャーボックスがクリックされたら背景色がかわります。クリックされたときの処理を簡単にするためにPictureBoxクラスを継承してPictureBoxExクラスを作成しています。
[色の選択]をクリックするとColorDialogが表示され、色を変更することができます。アイコンを保存するをクリックすると各ピクチャーボックスの背景色をしらべてファイルとしてアイコンを保存します。
現状では各ピクセルの色をひとつひとつクリックしないと設定できないのでめちゃくちゃ不便です。
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 |
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.IO; public partial class Form1 : Form { public Form1() { InitializeComponent(); } PictureBoxEx[,] pictureBox = new PictureBoxEx[32,32]; private void Form1_Load(object sender, EventArgs e) { for(int row = 0; row < 32; row++) { for(int column = 0; column < 32; column++) { var box = CreatePictureBox(column, row); pictureBox[column, row] = box; } } CurColor = Color.Black; } PictureBoxEx CreatePictureBox(int i, int j) { int size = 14; PictureBoxEx box = new PictureBoxEx(); box.Size = new Size(size, size); box.Location = new Point(size * i, size * j); box.Parent = panel1; box.BorderStyle = BorderStyle.FixedSingle; return box; } private void button1_Click(object sender, EventArgs e) { Bitmap bmp = new Bitmap(32, 32); for(int row = 0; row < 32; row++) { for(int column = 0; column < 32; column++) { bmp.SetPixel(column, row, pictureBox[column, row].BackColor); } } SaveFileDialog dlg = new SaveFileDialog(); dlg.Filter = "アイコン| *.ico"; if(dlg.ShowDialog() != DialogResult.OK) return; //ビットマップをアイコンへ変換 Icon icon = Icon.FromHandle(bmp.GetHicon()); Stream outStream = new FileStream(dlg.FileName, FileMode.Create, FileAccess.Write); icon.Save(outStream); outStream.Dispose(); bmp.Dispose(); icon.Dispose(); } Color curColor = new Color(); public Color CurColor { get { return curColor; } set { curColor = value; pictureBox1.BackColor = value; } } private void buttonColor_Click(object sender, EventArgs e) { if(colorDialog1.ShowDialog() == DialogResult.OK) CurColor = colorDialog1.Color; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
public class PictureBoxEx : PictureBox { public PictureBoxEx() { this.Click += PictureBoxEx_Click; } private void PictureBoxEx_Click(object sender, EventArgs e) { Form1 f = (Form1)FindForm(); this.BackColor = f.CurColor; } } |