⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 winmain.menu.cs

📁 一个C#开发的类似PHOTOSHOP的软件,用到了很多图形算法.
💻 CS
📖 第 1 页 / 共 4 页
字号:
using System;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
using PhotoSprite.Dialog;
using PhotoSprite.ImageProcessing;

namespace PhotoSprite
{
  public partial class WinMain
  {
    /******************************
     * 
     * 文件菜单
     * 
     ******************************/

    private void newToolStripMenuItem_Click(object sender, EventArgs e)
    {
      NewDialog dlg = new NewDialog();
      if (dlg.ShowDialog() == DialogResult.OK)
      {
        this.canvasMain.Visible = true;

        // 获取用户指定宽高值
        int newWidth = dlg.NewWidth;
        int newHeight = dlg.NewHeight;

        // 初始化一张空白图像
        Bitmap newImage = new Bitmap(newWidth, newHeight, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
        Graphics g = System.Drawing.Graphics.FromImage(newImage);
        g.FillRectangle(new SolidBrush(Color.White), new Rectangle(0, 0, newWidth, newHeight));

        // 保存到文件夹
        this.canvasMain.Image = newImage;
        SaveCanvas();
      }
    }

    /// <summary>
    /// 打开指定的文件
    /// </summary>
    /// <param name="fileName">图像文件名</param>
    private void OpenFile(string fileName)
    {
      if (!this.canvasMain.Visible)
        this.canvasMain.Visible = true;

      string fileNameExt = fileName.Substring(fileName.LastIndexOf(".")).ToLower();
      if (fileNameExt == ".jpg" || fileNameExt == ".gif" ||
        fileNameExt == ".bmp" || fileNameExt == ".png" ||
        fileNameExt == ".tif" || fileNameExt == ".psf")
      {
        if (history.Count > 0)
        {
          switch (MessageBox.Show("画布里已经有一幅图像,您要替换掉画布里的图像吗?\n如果选择“是”将替换掉现有图像!\n选择“否”将在新建图层里打开!",
            "友情提醒", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Information))
          {
            case DialogResult.Yes:
              myGraphic.SourceFile = fileName;
              myGraphic.DestFile = history.NextImage;
              myGraphic.ConvertFormat();

              history.Current++;
              this.pathToolStripStatusLabel.Text = fileName;
              break;

            case DialogResult.No:
              myGraphic.SourceFile = fileName;
              myGraphic.DestFile = history.InitDirectory + "layer.psf";
              myGraphic.ConvertFormat();

              this.layer.Visible = true;
              this.layer.ImageFile = myGraphic.DestFile;
              break;

            case DialogResult.Cancel:
              break;
          } // switch
        }
        else
        {
          myGraphic.SourceFile = fileName;
          myGraphic.DestFile = history.NextImage;
          myGraphic.ConvertFormat();

          history.Current++;
          history.Save();

          this.pathToolStripStatusLabel.Text = fileName;
        }
      }
    }

    private void openToolStripMenuItem_Click(object sender, EventArgs e)
    {
      // 初始化打开目录
      openFileDialog.InitialDirectory = openFolder;

      if (openFileDialog.ShowDialog() == DialogResult.OK)
      {
        string srcFileName = openFileDialog.FileName;
        OpenFile(srcFileName);

        RefreshHistory();
      }
    }

    private void saveToolStripMenuItem_Click(object sender, EventArgs e)
    {
      string saveFileName = this.pathToolStripStatusLabel.Text;
      if (saveFileName == "")
      {
        saveAsToolStripMenuItem_Click(sender, e);
        return;
      }

      myGraphic.SourceFile = history.CurrentImage;
      myGraphic.DestFile = saveFileName;
      myGraphic.ConvertFormat();

      history.Save();
    }

    private void saveAsToolStripMenuItem_Click(object sender, EventArgs e)
    {
      // 初始化打开目录为软件运行目录
      saveFileDialog.InitialDirectory = saveFolder;
      if (saveFileDialog.ShowDialog() == DialogResult.OK)
      {
        string saveFileName = saveFileDialog.FileName;

        myGraphic.SourceFile = history.CurrentImage;
        myGraphic.DestFile = saveFileName;
        myGraphic.ConvertFormat();

        history.Save();

        this.pathToolStripStatusLabel.Text = saveFileName;
      }
    }

    private void ieToolStripMenuItem_Click(object sender, EventArgs e)
    {
      myGraphic.SourceFile = history.CurrentImage;
      myGraphic.DestFile = history.InitDirectory + "ie.bmp";
      myGraphic.ConvertFormat();

      try
      {
        System.Diagnostics.Process.Start("IEXPLORE.EXE", myGraphic.DestFile);
      }
      catch
      {
        MessageBox.Show("打开 IE 失败!", "友情提醒", MessageBoxButtons.OK, MessageBoxIcon.Information);
      }
    }

    private void fireworksToolStripMenuItem_Click(object sender, EventArgs e)
    {
      myGraphic.SourceFile = history.CurrentImage;
      myGraphic.DestFile = history.InitDirectory + "fireworks.bmp";
      myGraphic.ConvertFormat();

      try
      {
        System.Diagnostics.Process.Start("Fireworks.EXE", myGraphic.DestFile);
      }
      catch
      {
        MessageBox.Show("打开 Fireworks 软件失败!", "友情提醒", MessageBoxButtons.OK, MessageBoxIcon.Information);
      }
    }

    private void photoshopToolStripMenuItem_Click(object sender, EventArgs e)
    {
      myGraphic.SourceFile = history.CurrentImage;
      myGraphic.DestFile = history.InitDirectory + "photoshop.bmp";
      myGraphic.ConvertFormat();

      try
      {
        System.Diagnostics.Process.Start("Photoshop.EXE", myGraphic.DestFile);
      }
      catch
      {
        MessageBox.Show("打开 Photoshop 软件失败!", "友情提醒", MessageBoxButtons.OK, MessageBoxIcon.Information);
      }
    }

    private void printDocument_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
    {
      e.Graphics.DrawImage(this.canvasMain.Image, 0, 0);
    }

    private void printPreviewToolStripMenuItem_Click(object sender, EventArgs e)
    {
      printPreviewDialog.ShowDialog();
    }

    private void printToolStripMenuItem_Click(object sender, EventArgs e)
    {
      if (printDialog.ShowDialog() == DialogResult.OK)
      {
        this.printDocument.Print();
      }
    }

    private void exitToolStripMenuItem_Click(object sender, EventArgs e)
    {
      this.Close();
    }


    /******************************
     * 
     * 编辑菜单
     * 
     ******************************/

    /// <summary>
    /// 刷新历史记录状态
    /// </summary>
    private void RefreshHistory()
    {
      if (history.CanUndo)
      {
        this.undoToolStripMenuItem.Enabled = true;
        this.undoToolStripButton.Enabled = true;
      }
      else
      {
        this.undoToolStripMenuItem.Enabled = false;
        this.undoToolStripButton.Enabled = false;
      }

      if (history.CanRedo)
      {
        this.redoToolStripMenuItem.Enabled = true;
        this.redoToolStripButton.Enabled = true;
      }
      else
      {
        this.redoToolStripMenuItem.Enabled = false;
        this.redoToolStripButton.Enabled = false;
      }

      if (this.canvasMain.SelectedPath.PointCount > 0)
        this.canvasMain.SelectedPath.Reset();
      this.canvasMain.ImageFile = history.CurrentImage;
    } // end of RefreshHistory

    private void HistoryStatus(object sender, System.EventArgs e)
    {
      RefreshHistory();
    }

    private void undoToolStripMenuItem_Click(object sender, EventArgs e)
    {
      history.Current--;
      RefreshHistory();
    }

    private void redoToolStripMenuItem_Click(object sender, EventArgs e)
    {
      history.Current++;
      RefreshHistory();
    }

    private void cutToolStripMenuItem_Click(object sender, EventArgs e)
    {
      RegionClip gc = new RegionClip(this.canvasMain.SelectedRegion);

      Bitmap srcImage = (Bitmap)this.canvasMain.Image.Clone();
      Clipboard.SetDataObject(gc.Hold(srcImage), true);

      this.canvasMain.Image = gc.Remove((Bitmap)this.canvasMain.Image.Clone());
      SaveCanvas();
    }

    private void copyToolStripMenuItem_Click(object sender, EventArgs e)
    {
      RegionClip gc = new RegionClip(this.canvasMain.SelectedRegion);
      Bitmap srcImage = (Bitmap)this.canvasMain.Image.Clone();

      Clipboard.SetDataObject(gc.Hold(srcImage), true);
    }

    private void pasteToolStripMenuItem_Click(object sender, EventArgs e)
    {
      if (Clipboard.GetDataObject().GetDataPresent(DataFormats.Bitmap))
      {
        // 保存到文件夹
        myGraphic.DestFile = history.InitDirectory + "layer.psf";
        myGraphic.Save((Bitmap)(Bitmap)Clipboard.GetDataObject().GetData(DataFormats.Bitmap));

        this.layer.Visible = true;
        this.layer.ImageFile = myGraphic.DestFile;
      }
    }

    private void optionToolStripMenuItem_Click(object sender, EventArgs e)
    {
      OptionDialog dlg = new OptionDialog();
      if (dlg.ShowDialog() == DialogResult.OK)
      {
        openFolder = dlg.OpenFolder;
        saveFolder = dlg.SaveFolder;
        tmpFolder = dlg.TmpFolder;
        undoTimes = dlg.UndoTimes;

        //history = new HistoryImage(tmpFolder, undoTimes);
      }
    }


    /******************************
     * 
     * 图像.调整菜单
     * 
     ******************************/

    private void colorBalanceToolStripMenuItem_Click(object sender, EventArgs e)
    {
      ColorBalanceDialog dlg = new ColorBalanceDialog(this.canvasMain);
      if (dlg.ShowDialog() == DialogResult.OK)
      {
        SaveCanvas();
      }
    }

    private void brightnessToolStripMenuItem_Click(object sender, EventArgs e)
    {
      DegreeDialog dlg = new DegreeDialog(this.canvasMain);
      dlg.Text = "亮度";
      dlg.Description = "亮度调节";
      dlg.Minimum = -255;
      dlg.Maximum = 255;
      dlg.Degree = 0;
      dlg.Support = DegreeDialog.SupportMethod.Brightness;
      if (dlg.ShowDialog() == DialogResult.OK)
      {
        SaveCanvas();
      }
    }

    private void contrastToolStripMenuItem_Click(object sender, EventArgs e)
    {
      DegreeDialog dlg = new DegreeDialog(this.canvasMain);
      dlg.Text = "对比度";
      dlg.Description = "对比度调节";
      dlg.Minimum = -100;
      dlg.Maximum = 100;
      dlg.Degree = 0;
      dlg.Support = DegreeDialog.SupportMethod.Contrast;
      if (dlg.ShowDialog() == DialogResult.OK)
      {
        SaveCanvas();
      }
    }

    private void hslToolStripMenuItem_Click(object sender, EventArgs e)
    {
      HslDialog dlg = new HslDialog(this.canvasMain);
      if (dlg.ShowDialog() == DialogResult.OK)
      {
        SaveCanvas();
      }
    }

    private void gammaCorrectToolStripMenuItem_Click(object sender, EventArgs e)
    {
      GammaCorrectDialog dlg = new GammaCorrectDialog(this.canvasMain);
      if (dlg.ShowDialog() == DialogResult.OK)
      {
        SaveCanvas();
      }
    }

    private void thresholdToolStripMenuItem_Click(object sender, EventArgs e)
    {
      DegreeDialog dlg = new DegreeDialog(this.canvasMain);
      dlg.Text = "阈值";
      dlg.Description = "阈值调节";
      dlg.Support = DegreeDialog.SupportMethod.Thresholding;
      if (dlg.ShowDialog() == DialogResult.OK)
      {
        SaveCanvas();
      }
    }

    private void grayToolStripMenuItem_Click(object sender, EventArgs e)
    {
      GrayDialog dlg = new GrayDialog(this.canvasMain);
      if (dlg.ShowDialog() == DialogResult.OK)
      {
        SaveCanvas();
      }
    }

    private void invertToolStripMenuItem_Click(object sender, EventArgs e)
    {
      Adjustment a = new Adjustment();
      Bitmap srcImage = this.canvasMain.Image;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -