2016年1月1日 星期五

C# - 捕捉滑鼠座標及圖片 Pixel RGB 值

練習:
  • 顯示 Window Form 內滑鼠位置座標。
  • 顯示圖片內之滑鼠座標下像素的 RGB 值。
##ReadMore##

Step1. 檔案 → 新增專案 → Windows Form 應用程式 → 拉物件 Form1.cs[設計] → 撰寫 Form1.cs

Step2. 將圖片放至「專案/bin/Debug」目錄內。

Step3. Windows Form 拉入需要工具:
  • pictureBox × 1 
  • button × 1
  • textBox × 5
  • Label × 5
  • openFileDialog × 1

Step4. 於 Form1.cs[設計] → pictureBox1 屬性 → sizeMode 改為 StretchImage

Step5. Coding Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace MouseGraphic
{
    public partial class Form1 : Form
    {

        //Bitmap imgone = new Bitmap("lena.png");
        Bitmap imgone;
        Color colorPixel;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            imgone = new Bitmap("lena.png");
            pictureBox1.Image = imgone;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog OpenImage = new OpenFileDialog();
            if (OpenImage.ShowDialog() == DialogResult.OK)
            {
                imgone = new Bitmap(OpenImage.FileName);
                pictureBox1.Image = imgone;
            }
            
        }

        // 自建一個 Mouse Move Listener
        private void imgone_MouseMove(object sender, MouseEventArgs e)
        {
            //顯示滑鼠座標
            textBox1.Text = e.X.ToString();
            textBox2.Text = e.Y.ToString();

            // 當滑鼠進入圖片內時才捉 RGB 值
            if ((e.X < imgone.Width) && (e.Y < imgone.Height))
            {
                //取得pixel的RGB值
                colorPixel = imgone.GetPixel(e.X, e.Y);
                textBox3.Text = colorPixel.R.ToString();
                textBox4.Text = colorPixel.G.ToString();
                textBox5.Text = colorPixel.B.ToString();
            }
        }
    }
}

Step6.
修改 Form1.Designer.cs → 展開全部程式 → 找到「// pictureBox1」分類 →於其下方加入:
            // 
            // pictureBox1
            // 
            this.pictureBox1.MouseMove += new System.Windows.Forms.MouseEventHandler(this.imgone_MouseMove);

1 則留言: