当前位置: 首页 > news >正文

【WPF】图片剪裁-ImageCropping

【WPF】图片剪裁-ImageCropping

  • 背景
  • 技术栈
  • 实现思路
  • 核心代码
    • 界面布局
    • Style
    • 处理逻辑
  • 使用技巧
  • 预览
  • 下载

背景

机缘巧合吧,当时在全网寻找图像剪裁工具,但大都不能满足需求,于是决定动手写。当然如果只是为了完成这么一个功能就没有必要记录了,主要是不依赖与第三方图像库,且实现方式简单,自我感觉很有纪念意义。

技术栈

  • C#
  • .NET6 可无缝升级后续版本
  • WPF
  • 无第三方库依赖

实现思路

  • 使用 Canvas 绘制选区,监听鼠标Down、Move事件,在事件中获取鼠标位置处理选框绘制
    • 获取鼠标左键 Down 时的屏幕坐标,记录为画框起始位置
    • 在鼠标左键并且移动的过程中获取鼠标的屏幕位置,记录为画框结束位置
    • Move 的过程中需要不断清除之前的画框,并重新绘制出新的画框,直到左键松开,绘制出最新的画框
  • 根据最新的画框位置,将屏幕位置转换成图像位置,从而获取到真实的图像选择区域
  • 通过 CroppedBitmap 取出备选区域的图像内容

核心代码

界面布局

<Grid Margin="5"><Grid.ColumnDefinitions><ColumnDefinition Width="2.5*" /><ColumnDefinition /></Grid.ColumnDefinitions><Border Background="WhiteSmoke" CornerRadius="4"><Canvasx:Name="MainCanvas"MouseDown="Canvas_MouseDown"MouseMove="Canvas_MouseMove"><Image x:Name="MainImage" Stretch="Uniform" /></Canvas></Border><Grid Grid.Column="1" Margin="5,0,0,0"><Grid.RowDefinitions><RowDefinition Height="50" /><RowDefinition /></Grid.RowDefinitions><StackPanel HorizontalAlignment="Center" Orientation="Horizontal"><ButtonWidth="100"Height="30"Margin="10,0"Background="DarkGreen"Click="Browse_Click"Content="浏览" /><ButtonWidth="100"Height="30"Margin="10,0"Background="DarkBlue"Click="Save_Click"Content="另存" /></StackPanel><BorderGrid.Row="1"Background="WhiteSmoke"CornerRadius="4"><Imagex:Name="ResultImage"HorizontalAlignment="Center"VerticalAlignment="Center"Stretch="Uniform" 
http://www.lryc.cn/news/402206.html

相关文章:

  • C++的模板(十二):forward模板
  • docker desktop历史版本安装
  • Ubuntu系统成功安装Docker教程
  • C++ 匹配并提取包括加中括号的日期时间的正则表达式
  • 一文-深入了解Ansible常见模块、安装和部署
  • etcd的备份与恢复
  • 从 Pandas 到 Polars 十八:数据科学 2025,对未来几年内数据科学领域发展的预测或展望
  • 【postgresql】pg_dump备份数据库
  • 服务器的80和443端口关闭也能申请SSL证书
  • Odoo17应用、模型、字段
  • Airtest的控制手机滑动位置偏差修正方法总结
  • 【机器学习】Grid Search: 一种系统性的超参数优化方法
  • Laravel Passport:API认证的瑞士军刀
  • SpringBoot Bean管理
  • Qt5.12.2安装教程
  • 2024年大数据高频面试题(中篇)
  • Python编程工具PyCharm和Jupyter Notebook的使用差异
  • 顶顶通呼叫中心中间件-被叫路由、目的地绑定(mod_cti基于FreeSWITCH)
  • 【数据集处理工具】根据COCO数据集的json标注文件实现训练与图像的文件划分
  • vue 如何做一个动态的 BreadCrumb 组件,el-breadcrumb ElementUI
  • FFmpeg播放视频
  • 重叠区间的求和
  • java包装类 及其缓存
  • 大龄程序员的出路在哪里?
  • Unity不用脚本实现点击按钮让另外一个物体隐藏
  • RAG技术-为自然语言处理注入新动力
  • Docker安装ELK(简易版)
  • WPF项目实战视频《一》(主要为WPF基础知识)
  • iOS ------ ARC的工作原理
  • 【React】JSX基础