C#拾色器工具源码

大兔子大兔子 提交于 2020-08-10 07:47:43

public partial class MainForm : Form
  {
    private MouseKeyHook mousekeyHook = new MouseKeyHook();
    private Timer time = new Timer();
    private Point point;
    private int width = 40;
    private int height = 40;

    public MainForm()
    {
      InitializeComponent();
    }

    private void MainForm_Load(object sender, EventArgs e)
    {
      try
      {
        this.mousekeyHook.MouseMoveEvent += new MouseKeyHook.MouseMoveHandler(this.Mouse_Move);
        this.mousekeyHook.MouseClickEvent += new MouseKeyHook.MouseClickHandler(this.Mouse_Click);
        this.mousekeyHook.DirectionKeyDown += new KeyEventHandler(this.Direction_KeyDown);
        this.time.Tick += new EventHandler(this.time_Tick);
        this.time.Interval = 100;
      }
      catch (Exception ex)
      {
        MessageBox.Show(ex.Message, "错误");
      }
    }

    /// <summary>
    /// 开始
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void startbtn_Click(object sender, EventArgs e)
    {
      try
      {
        this.mousekeyHook.Hook_Start();
        this.time.Start();
        this.stopbtn.Focus();
      }
      catch (Exception ex)
      {
        MessageBox.Show(ex.Message, "错误");
      }
    }

    /// <summary>
    /// 停止
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void stopbtn_Click(object sender, EventArgs e)
    {
      try
      {
        this.time.Stop();
        this.mousekeyHook.Hook_Clear();
        this.startbtn.Focus();
      }
      catch (Exception ex)
      {
        MessageBox.Show(ex.Message, "错误");
      }
    }

    /// <summary>
    /// 窗口置顶
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void topmostcb_CheckedChanged(object sender, EventArgs e)
    {
      try
      {
        this.TopMost = this.topmostcb.Checked;
      }
      catch (Exception ex)
      {
        MessageBox.Show(ex.Message, "错误");
      }
    }

    /// <summary>
    /// 鼠标移动事件
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void Mouse_Move(object sender, MouseEventArgs e)
    {
      try
      {
        this.point.X = e.Location.X;
        this.point.Y = e.Location.Y;
        this.xvalue.Text = this.point.X.ToString();
        this.yvalue.Text = this.point.Y.ToString();
      }
      catch (Exception ex)
      {
        MessageBox.Show(ex.Message, "错误");
      }
    }

    /// <summary>
    /// 鼠标右击事件
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void Mouse_Click(object sender, MouseEventArgs e)
    {
      this.stopbtn_Click(null, null);
    }

    /// <summary>
    /// 键盘方向键
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void Direction_KeyDown(object sender, KeyEventArgs e)
    {
      try
      {
        WinAPI.PointStruct pt = new WinAPI.PointStruct();
        WinAPI.GetCursorPos(ref pt);
        if (e.KeyCode == (Keys.RButton | Keys.MButton | Keys.Space))
        {
          pt.Y--;
        }
        else if (e.KeyCode == (Keys.Back | Keys.Space))
        {
          pt.Y++;
        }
        else if (e.KeyCode == (Keys.LButton | Keys.MButton | Keys.Space))
        {
          pt.X--;
        }
        else if (e.KeyCode == (Keys.LButton | Keys.RButton | Keys.MButton | Keys.Space))
        {
          pt.X++;
        }
        WinAPI.SetCursorPos(pt.X, pt.Y);
        this.point.X = pt.X;
        this.point.Y = pt.Y;
        this.xvalue.Text = this.point.X.ToString();
        this.yvalue.Text = this.point.Y.ToString();
      }
      catch (Exception ex)
      {
        MessageBox.Show(ex.Message, "错误");
      }
    }

    /// <summary>
    /// 定时刷新
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void time_Tick(object sender, EventArgs e)
    {
      Image img = this.regionColor.BackgroundImage;
      using (Bitmap bmp = new Bitmap(width + 1, height + 1))
      {
        using (Graphics g = Graphics.FromImage(bmp))
        {
          g.CopyFromScreen(new Point(this.point.X - this.width / 2, this.point.Y - this.height / 2), new Point(0, 0), new Size(bmp.Width, bmp.Height));
          this.regionColor.BackgroundImage = this.ZoomImage(bmp, this.regionColor.Size);

          this.selectColor.BackColor = bmp.GetPixel(this.width / 2, this.height / 2);
          this.htmltxt.Text = System.Drawing.ColorTranslator.ToHtml(this.selectColor.BackColor);
          this.argbtxt.Text = this.selectColor.BackColor.A.ToString().ToLower() + "," + this.selectColor.BackColor.R.ToString().ToLower() + "," + this.selectColor.BackColor.G.ToString().ToLower() + "," + this.selectColor.BackColor.B.ToString().ToLower();
          this.rgbtxt.Text = this.selectColor.BackColor.R.ToString().ToLower() + "," + this.selectColor.BackColor.G.ToString().ToLower() + "," + this.selectColor.BackColor.B.ToString().ToLower();
        }
      }
      if (img != null)
        img.Dispose();
    }

    /// <summary>
    /// 
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
    {
      this.stopbtn_Click(null, null);
    }


    /// <summary>
    /// 缩放图片
    /// </summary>
    /// <param name="bmp">图片源</param>
    /// <param name="newiwdth">新图片大小</param>
    /// <returns></returns>
    private Bitmap ZoomImage(Bitmap bmp, Size size)
    {
      Bitmap img = new Bitmap(size.Width, size.Height);
      using (Graphics g = Graphics.FromImage(img))
      {
        g.InterpolationMode = InterpolationMode.NearestNeighbor;
        g.SmoothingMode = SmoothingMode.None;
        g.DrawImage(bmp, new Rectangle(0, 0, size.Width, size.Height), new Rectangle(0, 0, bmp.Width, bmp.Height), GraphicsUnit.Pixel);
      }
      return img;
    }

  }

 源码下载地址:拾色器.zip

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!