一:效果,放到圖片上會顯示文字,單擊觸發一個事件
二:實現原理
將兩張圖片重合,點擊是另一張圖片,如下圖,根據顏色來判斷點擊的是那個圖片對象
三:代碼
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; using System.IO; namespace image { public partial class Form1 : Form { Bitmap showBm; //原始圖片 Bitmap hideBm; //參考圖片 Label lbInfo;//標簽 public Form1() { InitializeComponent(); this.pictureBox1.SizeMode = PictureBoxSizeMode.AutoSize; this.pictureBox1.BorderStyle = BorderStyle.None; this.pictureBox1.Location = new Point(0, 0); } #region 運行加載事件 private void Form1_Load(object sender, EventArgs e) { showBm = (Bitmap)global::image.Properties.Resources.ResourceManager.GetObject("show");//得到圖片 hideBm = (Bitmap)global::image.Properties.Resources.ResourceManager.GetObject("hide"); pictureBox1.Image = showBm; //this.Width = pictureBox1.Width + (this.Bounds.Width - this.ClientSize.Width);//窗體的寬度 lbInfo = new Label(); this.Controls.Add(lbInfo);//在form中加一個lable lbInfo.Parent = pictureBox1;//在picturebox范圍內才能顯示這個label(需要指定控件顯示位置,如果沒有就不顯示) lbInfo.BackColor = Color.FromArgb(150, 0, 0, 0);//背景色(透明度,0,0,0) lbInfo.ForeColor = Color.White;//前景色 lbInfo.TextAlign = ContentAlignment.MiddleCenter;//文字布局,中間顯示 } #endregion #region 鼠標移動事件 private void pic_Dh_MouseMove(object sender, MouseEventArgs e) { try { if (e.X <= 1010 && e.Y <= 630)//圖片大小 { Color clr = hideBm.GetPixel(e.X, e.Y); //獲取在參考圖對應坐標像素點的顏色信息 if (clr.ToArgb() != Color.Black.ToArgb())//比較argb顏色值設置文本顯示 { this.Cursor = Cursors.Hand;//設置手形 if (clr.ToArgb() == Color.FromArgb(255, 254, 0, 0).ToArgb())//對顏色進行判斷 lbInfo.Text = "春光油田"; else if (clr.ToArgb() == Color.FromArgb(255, 200, 160, 0).ToArgb()) lbInfo.Text = "本布圖油田"; else if (clr.ToArgb() == Color.FromArgb(255, 0, 200, 50).ToArgb()) lbInfo.Text = "寶浪油田"; else if (clr.ToArgb() == Color.FromArgb(255, 220, 255, 151).ToArgb()) lbInfo.Text = "雙河油田"; else if (clr.ToArgb() == Color.FromArgb(255, 255, 192, 63).ToArgb()) lbInfo.Text = "下二門油田"; else if (clr.ToArgb() == Color.FromArgb(255, 113, 250, 255).ToArgb()) lbInfo.Text = "魏崗油田"; else if (clr.ToArgb() == Color.FromArgb(255, 1, 139, 61).ToArgb()) lbInfo.Text = "趙凹油田"; else if (clr.ToArgb() == Color.FromArgb(255, 255, 83, 97).ToArgb()) lbInfo.Text = "張店油田"; else if (clr.ToArgb() == Color.FromArgb(255, 90, 220, 160).ToArgb()) lbInfo.Text = "北馬庄油田"; else if (clr.ToArgb() == Color.FromArgb(255, 254, 0, 246).ToArgb()) lbInfo.Text = "東庄油田"; else if (clr.ToArgb() == Color.FromArgb(255, 118, 146, 255).ToArgb()) lbInfo.Text = "井樓油田"; else if (clr.ToArgb() == Color.FromArgb(255, 20, 10, 109).ToArgb()) lbInfo.Text = "古城油田"; else if (clr.ToArgb() == Color.FromArgb(255, 134, 178, 29).ToArgb()) lbInfo.Text = "新庄油田"; else if (clr.ToArgb() == Color.FromArgb(255, 1, 155, 163).ToArgb()) lbInfo.Text = "王集油田"; else if (clr.ToArgb() == Color.FromArgb(255, 0, 140, 101).ToArgb()) lbInfo.Text = "楊樓油田"; else if (clr.ToArgb() == Color.FromArgb(255, 128, 119, 0).ToArgb()) lbInfo.Text = "付灣油田"; else if (clr.ToArgb() == Color.FromArgb(255, 154, 0, 182).ToArgb()) lbInfo.Text = "杜坡油田"; else lbInfo.Text = "有待開發"; } else { pictureBox1.Cursor = Cursors.Arrow; lbInfo.Text = "有待開發"; } //設置label位置 if (e.X + 20 + lbInfo.Width >= pictureBox1.Width) lbInfo.Left = e.X - 20 - lbInfo.Width; else lbInfo.Left = e.X + 20; if (e.Y + 20 + lbInfo.Height >= pictureBox1.Height) lbInfo.Top = e.Y - 20 - lbInfo.Height; else lbInfo.Top = e.Y + 20; } } catch { MessageBox.Show(e.X.ToString() + "," + e.Y.ToString()); } } #endregion #region 鼠標單擊事件 private void pic_Dh_Click(object sender, EventArgs e) { switch (lbInfo.Text) { case "春光油田": //ConstInfo.Yt_Name = lbInfo.Text; //數據成圖ToolStripMenuItem_Click(sender, e);//可觸發一個菜單欄事件 MessageBox.Show(""); break; case "本布圖油田": MessageBox.Show(""); break; case "寶浪油田": MessageBox.Show(""); break; case "雙河油田": MessageBox.Show(""); break; case "下二門油田": MessageBox.Show(""); break; case "魏崗油田": MessageBox.Show(""); break; case "趙奧油田": MessageBox.Show(""); break; case "張店油田": MessageBox.Show(""); break; case "北馬庄油田": MessageBox.Show(""); break; case "東庄油田": MessageBox.Show(""); break; case "井樓油田": MessageBox.Show(""); break; case "古城油田": MessageBox.Show(""); break; case "新庄油田": MessageBox.Show(""); break; case "王集油田": MessageBox.Show(""); break; case "楊樓油田": MessageBox.Show(""); break; case "付灣油田": MessageBox.Show(""); break; case "杜坡油田": MessageBox.Show(""); break; case "有待開發": //ConstInfo.Yt_Name = lbInfo.Text; //成果管理ToolStripMenuItem_Click(sender, e); break; } } #endregion } }