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

news2024/11/15 4:02:59

修改背景图

说明

这里我准备基于百度飞桨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做一个车牌识别,期待一下~


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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

用易货模式做成小程序商城的可行性分析

在当前的商业环境中,易货模式已经逐渐被人们所熟知和接受。这种以物易物的交易方式,不仅能帮助企业降低库存压力,还能有效促进资源的优化配置。那么,如果我们用易货模式来打造一个小程序商城,这样的想法是否可行呢&…

【探索Linux】—— 强大的命令行工具 P.29(网络编程套接字 —— 简单的TCP网络程序模拟实现)

阅读导航 引言一、TCP协议二、TCP网络程序模拟实现1. 预备代码⭕ThreadPool.hpp(线程池)⭕makefile文件⭕打印日志文件⭕将当前进程转变为守护进程 2. TCP 服务器端实现(TcpServer.hpp)3. TCP 客户端实现(main函数&…

Doris实战——天眼查Doris实时数仓构建

目录 前言 一、业务背景 二、原有架构及痛点 三、理想架构 四、技术选型 五、新数仓架构 六、应用场景优化 6.1 人群圈选 6.2 C端分析数据及精准营销线索场景 七、优化经验 八、规模和收益 九、未来规划 原文大佬的这篇实时数仓构建有借鉴意义的,这些摘…

JavaEE 初阶篇-深入了解进程与线程(常见的面试题:进程与线程的区别)

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 进程概述 2.0 线程概述 2.1 多线程概述 3.0 常见的面试题:谈谈进程与线程的区别 4.0 Java 实现多线程的常见方法 4.1 实现多线程方法 - 继承 Thread 类…

从先序与中序遍历序列构造二叉树

从先序与中序遍历序列构造二叉树 描述: 给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。 递归法 解题思路: 通过先序遍历我…

山西生态与智慧水利科技展会之华锐VRAR元宇宙水利应用展位恭候大驾

2024黄河流域生态与智慧水利科技博览会于今日在山西太原隆重开启,本次展会持续至3月24日共三天时间,相比之前的水展,这次展会区域之广辐射了中部六省,展会内容之多包括黄河流域生态保护的现状与挑战、水资源管理与水污染防治、智慧…

鸿蒙开发-UI-动画-页面间动画

鸿蒙开发-UI-组件导航-Navigation 鸿蒙开发-UI-组件导航-Tabs 鸿蒙开发-UI-图形-图片 鸿蒙开发-UI-图形-绘制几何图形 鸿蒙开发-UI-图形-绘制自定义图形 鸿蒙开发-UI-图形-页面内动画 鸿蒙开发-UI-图形-组件内转场动画 鸿蒙开发-UI-图形-弹簧曲线动画 文章目录 前言 一、放大缩…

今天简单聊聊容器化

什么是容器化 容器化(Containerization)是一种软件开发和部署的方法,其核心思想是将应用程序及其所有依赖项打包到一个独立的运行环境中,这个环境被称为容器。容器化技术使得应用程序可以在不同的计算环境中以一致的方式运行&…

ES集群不识别节点SSL证书的问题处理

问题描述 在启动ES服务并试图加入其他节点上已启动的集群时,出现报错(原文是一大段话,我按语义拆成了几段): [2024-03-19T16:32:02,844][WARN ][o.e.c.s.DiagnosticTrustManager] [node-2-master] failed to establish trust with server a…

宏璇物流邀您参观2024快递物流供应链与技术装备展览会

展会介绍 ESYE CHINA 2024快递物流展是亚洲范围内超大规模的快递物流业展示平台,由于展会的需求及扩大市场的影响力,ESYE 2024转战杭州,凭借着先进的经济发展水平、优越的地理位置、成熟的产业环境以及巨大的电商、微商、零售业、消费的市场…

云手机为电商提供五大出海优势

出海电商行业中,各大电商平台的账号安全是每一个电商运营者的重中之重,账号安全是第一生产力,也是店铺运营的基础。因此多平台多账号的防关联管理工具成了所有电商大卖家的必备工具。云手机最核心的优势就是账户安全体系,本文将对…

ky10.aarch64安装Jenkins

参考地址:《安装部署 Jenkins》 前言 有war包和rpm两种安装方式,如果是长期使用更加推荐rpm的安装方式,可以更好的管理Jenkins; 我此次安装jenkins主要用于测试和简单的个人使用,所以选择更轻便的war安装。 1 下载J…

【C#】C#窗体应用修改窗体的标题和图标

修改窗体顶部的标题和图表,如果不修改则会使用默认的图标,标题默认为Form1,如第一张图,这时候如果想换成和系统有关的内容,如第二张图,可以使用下面的方法进行修改,修改后打开该软件任务栏显示的…

【yaml包如何安装】

【yaml包如何安装】 安装yaml包(也称为pyyaml) ,可以直接使用如下述命令 pip install pyyaml

LeetCode - 存在重复元素

219. 存在重复元素 II 这道题可以用两个方法解决。 哈希表 从左到右遍历数组,并将数组的下标存到hash中,在遍历数字的过程中,如果hash中不存在nums[i],将nums[i]加入到hash当中,若存在,则判断下标之间的关…

【算法】数组-移除元素

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并原地修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的…

Java的IO之BIO

Java IO流是用于处理输入和输出的机制,用于读取和写入数据。Java提供了丰富的IO类和接口,用于处理不同类型的数据和操作。Java中的IO模型主要分为BIO和NIO两种,他们可以分别被视为IO编程的不同风格或模式,并非IO流具体的类型&…

云计算2主从数据库

设置主从数据库的目的是将数据库1和数据库2分别建在两个虚拟机上,并实现数据互通访问 首先准备两个虚拟机,这里示例ip分别为: 192.168.200.10;192.168.200.20 修改主机名,一个是mysql1,一个是mysql2&#x…

除了Confluence,还有哪些好用的知识库平台

大家都知道,Confluence作为知识库平台界的佼佼者,确实给我们带来了不少便利。但好东西总是层出不穷,除了Confluence,市面上还有其他好用的知识库平台也值得我们去尝试。今天,我就给大家聊聊我个人用过并且觉得挺不错的…

Vue+Element UI 开发PC端页面,出现页面抖动原因及解决办法

问题描述: 页面 拖动 放大放小,出现页面抖动,屏幕不停闪动 解决方案: 1.找到相对应的页面的div 加上样式: .app-container {height: 100%;overflow: auto;margin: 0; //加上这个把滚动条隐藏掉,否则就…