C# winform修改背景图 控件双向绑定 拖拽打开图片

修改背景图

说明

这里我准备基于百度飞桨PaddleSeg项目的人像分割模块做一个人像抠图,这里顺便用上了双向绑定和图片拖拽打开。

下面就是示例:

用颜色替换
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

用背景图替换

在这里插入图片描述

在这里插入图片描述

保存成功后的图片

在这里插入图片描述

一、使用百度飞桨PaddleSeg

 //初始化 引擎
 engine = new PaddleSegMattingEngine();
 //参数
 parameter = new MattingParameter();
 //parameter.outbgfile = true;//输出mask图
 //parameter.bgtransparent = true;//背景透明
 engine.Init(modelPath, parameter);

二、下拉框双向绑定

            comb.DataSource = lstCom;
            comb.DisplayMember = "Name";
            comb.DropDownStyle = ComboBoxStyle.DropDownList;

            picOld.DataBindings.Add("SizeMode", lstCom, "Value");
            picNew.DataBindings.Add("SizeMode", lstCom, "Value");
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SegSharp
{
    public class ComBoxModel : INotifyPropertyChanged
    {
        string _name;
        PictureBoxSizeMode _value;

        public string Name
        {
            get { return _name; }
            set
            {
                _name = value;
                OnPropertyChanged(nameof(Name));
            }
        }

        public PictureBoxSizeMode Value
        {
            get { return _value; }
            set
            {
                _value = value;
                OnPropertyChanged(nameof(Value));
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;

        protected virtual void OnPropertyChanged(string propertyName)  //属性变更通知
        {
            //if (PropertyChanged != null)
            //{
            //    PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            //}
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }

    }
}

三、图片拖拽打开

先将form的AllowDrop设置为true

在这里插入图片描述

利用动态库模拟事件

 //函数从动态链接库中倒入(模拟鼠标事件)
 [System.Runtime.InteropServices.DllImport("user32")]
 private static extern int mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo);
 const int MOUSEEVENTF_LEFTDOWN = 0x0002; //模拟鼠标左键按下
 const int MOUSEEVENTF_LEFTUP = 0x0004; //模拟鼠标左键抬起 
                                        //设置静态字段传递图片路径参数
 public static string path_url;

 private void Form1_DragDrop(object sender, DragEventArgs e)
 {
     //获取当前推拽图片的路径
     string path1 = ((Array)e.Data.GetData(DataFormats.FileDrop)).GetValue(0).ToString(); ;
     path_url = path1;
     //模拟鼠标释放鼠标左键的时事件
     mouse_event(MOUSEEVENTF_LEFTUP | MOUSEEVENTF_LEFTUP, Cursor.Position.X, Cursor.Position.Y, 0, 0);
 }

 private void Form1_DragEnter(object sender, DragEventArgs e)
 {
     if (e.Data.GetDataPresent(DataFormats.FileDrop))
         //需求有一需要从QQ的聊天记录中拖拽图片到WinForm窗体中,用ALL会出现QQ的聊天信息中的图片丢失
         //Link和Move不能从QQ的聊天记录中拖拽图片到WinForm窗体中,Copy和Scroll都可以实现,推荐使用Copy
         e.Effect = DragDropEffects.Copy;
     else
         e.Effect = DragDropEffects.None;
 }

 private void picOld_MouseUp(object sender, MouseEventArgs e)
 {
     //给PictureBox设置图片路径
     picOld.ImageLocation = path_url;
     txtName.Text = path_url;
 }

在这里插入图片描述

成功啦~

源码下载

下篇准备利用OCR做一个车牌识别,期待一下~


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/478849.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

掌握未来技术:国产openEuler 操作系统学习网站指南!

介绍:openEuler是一个开源的操作系统平台,由华为技术有限公司发起并维护。 首先,openEuler支持多种处理器架构,包括但不限于AArch64(鲲鹏)和x86-64,这使得它可以在多种硬件平台上运行&#xff0…

滴水逆向PE结构

1.操作系统是只能打开可执行文件 以4D 5A开头MZ 其他的txt都是什么wrod 都是在exe程序中打开的 txt啥的不是可执行文件 PE结构是分节的 一节一节 节省硬盘空间 32位中任何一个exe都有4g的虚拟内存 占内存空间大 给磁盘空间小 在硬盘空间紧密 在内存空间大 &#xff08…

设计模式 --4:工厂方法模式

总结 : 个人理解: 工厂方法模式就是在简单工程模式的基础下将工厂类抽象出来。如果不抽象工厂类 ,每一次创建一个新的算法,都要修改原来的工厂类,这不符合 开放–封闭原则 将工厂类给抽象出来,让具体的算法…

appium自动化框架综合实践

结合前面的元素寻找、操作、unittest测试框架,搭建一个完整的自动化框架。本篇旨在框架设计、单机用例执行、输出报告,下篇继续实践Bat批处理执行测试、多设备并发测试。 框架功能 数据配置日志输出截图处理基础功能封装(公共方法&#xff…

Java学习笔记NO.24

T1.完成理工超市系统的商品类及其子类的定义,实现“浏览商品”及“查看商品详情”功能 (1)商品类 public class Goods {public String name;public double price;public int count;public String desc;public Goods(String name, double p…

敏捷开发——第二次作业JS/服务器的部署

部署 Web 服务器 1. 安装 Apache HTTP 服务器并部署静态网页应用 ⭐⭐ 默认情况下,Apache 在 /var/www/html 目录下寻找要提供服务的文件。可以将静态网页文件放置在这个目录下 2.安装 Nginx 并部署静态页面应用 3. 实践部分 1. 2. 3. 在 /var/www/html 目录下…

用大语言模型控制交通信号灯,有效缓解拥堵!

城市交通拥堵是一个全球性的问题,在众多缓解交通拥堵的策略中,提高路口交通信号控制的效率至关重要。传统的基于规则的交通信号控制(TSC)方法,由于其静态的、基于规则的算法,无法完全适应城市交通不断变化的…

又一款代码神器,效率直接翻倍!免费的还是香啊!

前言 提到商汤科技,你可能仍然将其与“AI四小龙”、“计算机视觉领军企业”等标签联系在一起。然而,在ChatGPT与Sora赢得广泛关注后,商汤科技依托其深厚的人工智能技术基础,迅速开发出自己的大型模型及人工智能应用产品&#xff…

网络基础(一)初识

1、计算机网络背景 1.1、网络发展 1. 独立模式: 计算机之间相互独立; 2. 网络互联: 多台计算机连接在一起,完成数据共享; 3. 局域网LAN: 计算机数量更多了, 通过交换机和路由器连接在一起; 4. 广域网WAN: 将远隔千里的计算机都连在一起;…

Win11右键菜单定制

0.优化目标 优化成:右键菜单优化成全量菜单选项,并精简掉我不需要的菜单选项。 具体优化步骤: 1.win11菜单恢复到win10经典状态 win11右键菜单是缩水版的,需要再次点击“显示更多选项”才能找到自己想用到的选项,再…

国内ip切换是否合规?

在网络使用中,IP地址切换是一种常见的行为,可以用于实现隐私保护、访问地域限制内容等目的。然而,对于国内用户来说,IP地址切换是否合规一直是一个备受关注的话题。在中国,网络管理严格,一些IP切换行为可能…

什么是数据中心常用的ping指令?有什么作用和功能?

什么是ping指令,它的作用是什么? ping是一种计算机网络工具,用于测试网络连接是否正常,以及确定网络延迟和丢包情况。ping的运作原理是向目标主机传出一个ICMP的请求回显数据包,并等待接收回显回应数据包。程序会按时…

基于java+springboot+vue实现的自习室座位管理系统(文末源码+Lw+ppt)23-491

摘 要 时代在飞速进步,每个行业都在努力发展现在先进技术,通过这些先进的技术来提高自己的水平和优势,自习室座位管理系统当然不能排除在外。自习室座位管理系统是在实际应用和软件工程的开发原理之上,运用java语言以及SpringBo…

【排序】插入排序与选择排序详解

文章目录 📝选择排序是什么?🌠选择排序思路🌉 直接选择排序🌠选择排序优化🌠优化方法🌉排序优化后问题 🌠选择排序效率特性 🌉插入排序🌠插入排序实现 &#…

如何一键下载微信视频号的视频至本地电脑

社交媒体平台上的短视频已经成为我们获取信息和娱乐的重要来源,尤其是微信视频号。这个平台汇聚了丰富多样的内容,从生活分享到专业知识,应有尽有。然而,有时我们可能希望将这些有趣的或有用的视频保存到本地以便离线观看或分享给…

【免费】如何考取《鲸鸿动能广告初级优化师》认证(详细教程)

鲸鸿动能广告初级优化师认证考试PC网址 初级:鲸鸿动能广告初级优化师认证-华为开发者学堂 (huawei.com) 注:免费认证,里面包含免费的课程,浏览器用Edge。 文章目录 鲸鸿动能广告初级优化师认证考试网址 前言 一、备考流程 二…

PCL点云处理之最小中值平方(Lmeds法)拟合平面(二百三十四)

PCL点云处理之 最小中值平方法(Lmeds)拟合平面(二百三十四) 一、算法介绍一、拟合原理二、具体实现1.代码2.结果一、算法介绍 (本文提供详细注释,输出拟合平面参数和平面点云) Lmeds(Least Median of Squares)是一种统计学方法,用于拟合数据并减少异常值对拟合结果…

MySQL数据库 - 事务

1. 事务的概念 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中, 要删除一个人员,即需要删除人员的基本资料,又需要删除和该人员相关的信息,如信箱, 文章等等。这样&#x…

总结 | vue3项目初始化(附相应链接)

如何运行 vue 项目:vscode运行vue项目_vscode启动vue项目命令-CSDN博客 vue3项目搭建 目录管理 git管理: 目录调整: 克隆项目,绑定自己的库:[git] 如何克隆仓库,进行项目撰写,并绑定自己的…

kotlin中使用ViewBinding绑定控件

kotlin中使用ViewBinding绑定控件 什么是ViewBinding? View Binding是Android Studio 3.6推出的新特性,主要用于减少findViewById的冗余代码,但内部实现还是通过使用findViewById。通过ViewBinding,可以更轻松地编写可与视图交互…