在图片上点击一个区域触发这个区域的事件

一:效果,放到图片上会显示文字,单击触发一个事件

二:实现原理

将两张图片重合,点击是另一张图片,如下图,根据颜色来判断点击的是那个图片对象

三:代码

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

    }
}
时间: 2024-10-27 07:24:58

在图片上点击一个区域触发这个区域的事件的相关文章

在事件触发的时候,有时我们需要一些模拟用户行为的操作。例如:当网页加载完毕后 自行点击一个按钮触发一个事件,而不是用户去点击。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Typ

如何等到所有的图片都加载完成之后触发一次onload事件

var details_img = $(".details img"); //所有的图片 var img_len = details_img.length; details_img.on('load', function() { if (!--img_len) { if (detailScroll) { detailScroll.destroy(); detailScroll = null; } detailScroll = new IScroll('.bottom', { scrol

yii2.0下,单图片上传到搜狐云台以及图片上传到本机。

图片服务器接的是搜狐云台.在搜狐云台上有代码包,下载下来,放到yii框架的vendor下. yii2.0导入第三方库,很简单,写个autoload的文件,然后在入口脚本index.php中包含那个autoload文件就好了.具体到这个云台的库,只要包含代码中的autoload文件就好了. 简单介绍下搜狐云台的实现,用户会有一个对应的域名,然后选择建一些bucket,文件的上传下载都是在这个bucket中执行.函数调用在云台提供的文档中介绍的很清楚.这里就不再介绍了.同时我只从php的部分来介绍,

H5拍照、选择图片上传组件核心

背景 前段时间项目重构,改成SSR的项目,但之前用的图片选择上传组件不支持SSR(server-side-render).遂进行了调研,发现很多的工具.但有的太大,有的使用麻烦,有的不满足使用需求.决定自己写一个h5移动端图片上传组件.图片上传是一个比较普遍的需求,PC端还好,移动端就不是特别好做了.下面将过程中一些重点的问题进行简单的记录. 重点 1.关于input 选择功能使用<input>标签实现.属性accept='image/*',:capture表示,可以捕获到系统默认的设备,比如

分布式系统图片上传方案

思路分析 直接将图片上传到一个指定的目录,访问.下载图片都访问这个目录. 由于项目最终是要部署到Linux环境,所以直接将图片上传到Linux服务器. 问题:那如何将图片上传到Linux呢? 答:使用vsftpd组件,实现文件传输. vsftpd简介 问题1:vsftpd是什么? 答:ftp(File Transfer Protocol)文件传输协议.(实现不同操作系统之间文件的传输) vsftpd是一个基于ftp协议的文件传输服务器软件. 问题2:vsftpd作用是什么? 答:传输文件.(跨平

VUE2.0+VUE-Router做一个图片上传预览的组件

之前发了一篇关于自己看待前端组件化的文章,但是由于学习和实践的业务逻辑差异,所以自己练习的一些demo逻辑比较简单,打算用vue重构现在公司做的项目,所以在一些小的功能页面上使用vue来做的,现在写的这个是项目中用户反馈功能而来的,收获还是挺多的. 收获:dom操作=>数据操作       router的使用       组件的使用,具体总结放在尾部. 功能:1.上传图片 2.显示缩略图 3.可以删除 4.可以重新选择文件 先上成品图(主要抽取图片这块),自己在家主要做的功能,样式就不计较了.

在图片上画矩形并高亮显示矩形区域、统计矩形区域中像素情况并绘制直方图

<学习OpenCV>中文版第4章第3题 提纲 题目要求 程序代码 结果图片 题目要求: ①允许用户在图片上选择一个矩形区域,当鼠标放开,高亮显示矩形区域 ②在另一个独立窗口中,使用绘图函数绘制一个图表,分别用蓝.绿和红色表示选中区域中各种颜色的像素在指定数值范围内的数量. 程序代码: 1 #include "stdafx.h" 2 #include <cv.h> 3 #include <highgui.h> 4 using namespace std

我需要在Web上完成一个图片上传的功能

我需要在Web上完成一个图片上传的功能. 这个页面需要能从手机中选择图片上传. 首先,这个页面是从微信上面触发的,所以修改了微信的的入口地址,增加了身份识别号作为传参. 跳转到页面的时候,页面先检查身份识别号是否已参与过本次活动,参与过本次活动的,可以跳转到变更图片功能.如果未参与过图片上传,则需要传入图片. 看上去是很简单的逻辑. 马上行动.

如何在html中把一个图片或者表格覆盖在一张已有图片上的任意位置

如何在html中把一个图片或者表格覆盖在一张已有图片上的任意位置 <div style="position:relative;"> <img src="" width="500" height="500" /> <div style="position:absolute; left:80px; top:50px; border:#000 solid 1px;"><i