VisualStudioなら簡単にアイコンをつくることができますが、プログラムでつくるにはどうすればいいのでしょうか?
フリーソフトでアイコン作成をしてくれるものもありますが、このようなものを自作することはできないのでしょうか?
Bitmap画像をアイコンに変換する方法を紹介します。そのためにはBitmap画像を用意しましょう。
まずはBitmap画像のパスを入力する必要があります。これを簡単にするために
では、TextBoxForFilePathクラスを作成しました。今回もこれを使ってみることにします。
[Iconに変換する]がクリックされたらicoファイルの保存先を指定してicoファイルを指定します。
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 |
public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { SaveFileDialog dialog = new SaveFileDialog(); dialog.Filter = "アイコンファイル|*.ico"; if(dialog.ShowDialog() != DialogResult.OK) return; if(!File.Exists(textBoxForFilePath1.Text)) { MessageBox.Show("Bitmapファイルのバスが不正です。", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } MakeIconFromBmpFile(textBoxForFilePath1.Text, dialog.FileName); } // ビットマップファイルからアイコンファイルをつくる void MakeIconFromBmpFile(string bitmapFilePath, string iconFilePath) { Image img = Image.FromFile(bitmapFilePath); // アイコンの大きさは32×32 Bitmap bitmap = new Bitmap(32, 32, System.Drawing.Imaging.PixelFormat.Format24bppRgb); Graphics g = Graphics.FromImage(bitmap); g.DrawImage(img, new Rectangle(0, 0, 32, 32)); g.Dispose(); //ビットマップをアイコンへ変換 Icon icon = Icon.FromHandle(bitmap.GetHicon()); Stream outStream = new FileStream(iconFilePath, FileMode.Create, FileAccess.Write); icon.Save(outStream); //後始末 outStream.Close(); bitmap.Dispose(); icon.Dispose(); img.Dispose(); } } |
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 |
public class TextBoxForFilePath : TextBox { public TextBoxForFilePath() { AllowDrop = true; } protected override void OnDragOver(DragEventArgs e) { base.OnDragOver(e); if(e.Data.GetDataPresent(DataFormats.FileDrop)) e.Effect = DragDropEffects.Copy; } protected override void OnDragDrop(DragEventArgs e) { base.OnDragOver(e); if(e.Data.GetDataPresent(DataFormats.FileDrop)) { string[] vs = (string[])e.Data.GetData(DataFormats.FileDrop); Text = vs[0]; } } protected override void OnKeyDown(KeyEventArgs e) { if(e.KeyCode == Keys.V && e.Control) { if(Clipboard.ContainsFileDropList()) { var paths = Clipboard.GetFileDropList(); Text = paths[0]; e.Handled = true; e.SuppressKeyPress = true; return; } } base.OnKeyDown(e); } } |
Iconに画像変換したら、画像にすごいノイズが出たり、ファイルが破損している可能性がありますとか出てきました。対処法ありませんか?