/// <summary>
 /// 新しいインスタンスを構築する。
 /// </summary>
 public IconViewControl()
 {
     selectedIndex            = -1;
     iconSet                  = new IconSet();
     iconSet.PropertyChanged += OnIconSetPropertyChanged;
     InitializeComponent();
 }
Exemple #2
0
        /// <summary>
        /// アイコン保存ボタンがクリックされたときに通知を受け取る。
        /// </summary>
        /// <param name="sender">送信元オブジェクト</param>
        /// <param name="e">イベントオブジェクト</param>
        private void OnButtonIconSaveClick(object sender, EventArgs e)
        {
            saveFileDialog.InitialDirectory = Settings.Default.DirectoryIcon;
            saveFileDialog.FileName         = "icon.png";
            if (saveFileDialog.ShowDialog(this) != DialogResult.OK)
            {
                return;
            }
            Settings.Default.DirectoryIcon = System.IO.Path.GetDirectoryName(saveFileDialog.FileName);

            try
            {
                string    path          = saveFileDialog.FileName;
                IconSet   iconSet       = iconSetViewControl.IconSet;
                Image     originalImage = iconSet.Image;
                Rectangle region        = iconSet.GetIconRegion(iconSetViewControl.SelectedIndex);
                using (Bitmap saveImage = new Bitmap(region.Width, region.Height, originalImage.PixelFormat))
                {
                    using (Graphics g = Graphics.FromImage(saveImage))
                    {
                        g.DrawImage(originalImage, new Rectangle(0, 0, region.Width, region.Height), region,
                                    GraphicsUnit.Pixel);
                        saveImage.Save(path);
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(this, ex.Message, Resources.DialogTitleError);
            }
        }
Exemple #3
0
        /// <summary>
        /// 新しいアイコン画像を設定する。
        /// </summary>
        /// <param name="filePath">ファイルパス</param>
        private void SetNewIconImage(string filePath)
        {
            IconSet iconSet = iconViewControl.IconSet;

            using (Image image = ReadImage(filePath))
            {
                iconSet.Image = (Image)(image.Clone());

                // イメージがセットできたら最大数(=コンボボックス)を更新
                int maxIconCount = iconSet.IconCount;
                comboBoxNumber.Items.Clear();
                for (int i = 0; i < maxIconCount; i++)
                {
                    string item = i.ToString();
                    comboBoxNumber.Items.Add(item);
                }

                // デフォルトを選択
                if (comboBoxNumber.Items.Count > 0)
                {
                    comboBoxNumber.SelectedIndex     = 0;
                    iconSetViewControl.SelectedIndex = 0;
                }

                // 有効・無効状態を更新する。
                comboBoxNumber.Enabled = (comboBoxNumber.Items.Count > 0);
            }
        }
Exemple #4
0
        /// <summary>
        /// アイコン選択状態が変わった場合などに、コントロールの有効・無効を設定する。
        /// </summary>
        private void UpdateControlEnables()
        {
            IconSet iconSet = iconSetViewControl.IconSet;

            // TODO: 有効・無効設定が必要なものをここに書く。
            menuItemSave.Enabled     = iconSet.IconCount > 0;
            menuItemSaveAs.Enabled   = iconSet.IconCount > 0;
            buttonIconSave.Enabled   = iconSetViewControl.SelectedIndex >= 0;
            buttonIconChange.Enabled = iconSetViewControl.SelectedIndex >= 0;
        }
Exemple #5
0
        /// <summary>
        /// アイコン変更ボタンがクリックされた時に通知を受け取る。
        /// </summary>
        /// <param name="sender">送信元オブジェクト</param>
        /// <param name="e">イベントオブジェクト</param>
        private void OnButtonIconChangeClick(object sender, EventArgs e)
        {
            openFileDialog.InitialDirectory = Settings.Default.DirectoryIcon;
            openFileDialog.FileName         = string.Empty;
            if (openFileDialog.ShowDialog(this) != DialogResult.OK)
            {
                return;
            }
            Settings.Default.DirectoryIcon = System.IO.Path.GetDirectoryName(openFileDialog.FileName);

            try
            {
                // Note: Graphicsでやろうとしたが、部分クリアの方法がうまくいかなかったため、
                // ImageBufferを使用する実装に変更した。
                // (FillRectで透過色設定はできなかった)
                IconSet iconSet       = iconSetViewControl.IconSet;
                int     selectedIndex = iconSetViewControl.SelectedIndex;
                string  path          = openFileDialog.FileName;

                using (Image srcImage = ReadImage(path))
                {
                    Rectangle region = iconSet.GetIconRegion(selectedIndex);

                    // コピー先領域クリア
                    var imageBuffer = CGenImaging.ImageBuffer.CreateFrom(iconSet.Image);
                    for (int y = region.Top; y < region.Bottom; y++)
                    {
                        for (int x = region.Left; x < region.Right; x++)
                        {
                            imageBuffer.SetPixel(x, y, Color.Transparent);
                        }
                    }

                    // アイコン描画
                    var srcImageBuffer = CGenImaging.ImageBuffer.CreateFrom(srcImage);
                    int width          = Math.Min(srcImageBuffer.Width, region.Width);
                    int height         = Math.Min(srcImageBuffer.Height, region.Height);
                    int srcX           = (srcImageBuffer.Width - width) / 2;
                    int srcY           = (srcImageBuffer.Height - height) / 2;
                    int dstX           = region.X + (region.Width - width) / 2;
                    int dstY           = region.Y + (region.Height - width) / 2;

                    imageBuffer.WriteImage(srcImageBuffer, srcX, srcY, dstX, dstY, width, height);

                    iconSet.Image = imageBuffer.GetImage();
                    // 再設定されたのでインデックス戻す。
                    iconSetViewControl.SelectedIndex = selectedIndex;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(this, ex.Message, Resources.DialogTitleError);
            }
        }
 /// <summary>
 /// 新しいインスタンスを構築する。
 /// </summary>
 public IconSetViewControl()
 {
     iconSet = new IconSet();
     iconSet.PropertyChanged += OnIconSetPropertyChanged;
     InitializeComponent();
 }