WPF实现用户头像裁剪

WPF开发者QQ群: 340500857 

前言

       需要做一个用户选择头像并进行裁剪。

欢迎转发、分享、点赞,谢谢大家~。  

效果预览(更多效果请下载源码体验):

一、MainWindow.xaml代码如下:

<Grid><Border x:Name="containerPanel"><Canvas x:Name="DrawCanvas"VerticalAlignment="Center" Background="Transparent" Width="{Binding ElementName=containerPanel,Path=ActualWidth}"Height="{Binding ElementName=containerPanel,Path=ActualHeight}"><Rectangle x:Name="rectImage" VerticalAlignment="Center" HorizontalAlignment="Center"Width="{Binding ElementName=containerPanel,Path=ActualWidth}"Height="{Binding ElementName=containerPanel,Path=ActualHeight}"><Rectangle.Fill><ImageBrush ImageSource="{Binding ImageSource,RelativeSource={ RelativeSource AncestorType={x:Type local:ImageCutCustoms}}}"/></Rectangle.Fill></Rectangle><Rectangle VerticalAlignment="Center" HorizontalAlignment="Center"Width="{Binding ElementName=rectImage,Path=ActualWidth}"Height="{Binding ElementName=rectImage,Path=ActualHeight}"Fill="#99000000"/><Rectangle VerticalAlignment="Center" HorizontalAlignment="Center"Width="{Binding ElementName=containerPanel,Path=ActualWidth}"Height="{Binding ElementName=containerPanel,Path=ActualHeight}"><Rectangle.Fill><ImageBrush ImageSource="{Binding ImageSource,RelativeSource={ RelativeSource AncestorType={x:Type local:ImageCutCustoms}}}"/></Rectangle.Fill><Rectangle.Clip><RectangleGeometry x:Name="rectRectangle" Rect="{Binding CutRect,RelativeSource={RelativeSource AncestorType={x:Type local:ImageCutCustoms}}}"/></Rectangle.Clip></Rectangle><local:DragDropView x:Name="dragDropItem"  Width="{Binding ElementName=rectRectangle, Path= Rect.Width}"Height="{Binding ElementName=rectRectangle, Path= Rect.Height}"Canvas.Left="{Binding ElementName=rectRectangle, Path= Rect.X}"Canvas.Top="{Binding ElementName=rectRectangle, Path= Rect.Y}"ParentMaxHeight="{Binding ElementName=DrawCanvas,Path=ActualHeight}"ParentMaxWidth="{Binding ElementName=DrawCanvas,Path=ActualWidth}"/></Canvas></Border></Grid>

二、ImageCutCustoms代码如下:

public partial class ImageCutCustoms : UserControl{public ImageSource ImageSource{get { return (ImageSource)GetValue(ImageSourceProperty); }set { SetValue(ImageSourceProperty, value); }}// Using a DependencyProperty as the backing store for ImageSource.  This enables animation, styling, binding, etc...public static readonly DependencyProperty ImageSourceProperty =DependencyProperty.Register("ImageSource", typeof(ImageSource), typeof(ImageCutCustoms), new PropertyMetadata(ImageSourcePropertyChangedCallback));public ImageSource SaveImageSource{get { return (ImageSource)GetValue(SaveImageSourceProperty); }set { SetValue(SaveImageSourceProperty, value); }}// Using a DependencyProperty as the backing store for SaveImageSource.  This enables animation, styling, binding, etc...public static readonly DependencyProperty SaveImageSourceProperty =DependencyProperty.Register("SaveImageSource", typeof(ImageSource), typeof(ImageCutCustoms), new PropertyMetadata());public Rect CutRect{get { return (Rect)GetValue(CutRectProperty); }set { SetValue(CutRectProperty, value); }}// Using a DependencyProperty as the backing store for CutRect.  This enables animation, styling, binding, etc...public static readonly DependencyProperty CutRectProperty =DependencyProperty.Register("CutRect", typeof(Rect), typeof(ImageCutCustoms), new PropertyMetadata());private Point startPoint, endPoint;public ImageCutCustoms(){InitializeComponent();this.dragDropItem.UpdateImageEvent += DragDropItem_UpdateImageEvent;}private void DragDropItem_UpdateImageEvent(){var x = Canvas.GetLeft(dragDropItem);var y = Canvas.GetTop(dragDropItem);var w = dragDropItem.Width;var h = dragDropItem.Height;RenderTargetBitmap rtb = new RenderTargetBitmap((int)rectImage.RenderSize.Width,(int)rectImage.RenderSize.Height, 96d, 96d, System.Windows.Media.PixelFormats.Default);rtb.Render(rectImage);var crop = new CroppedBitmap(rtb, new Int32Rect((int)x, (int)y, (int)w, (int)h));SaveImageSource = crop;startPoint = new Point(x, y);endPoint = new Point(x+w, y+h);CutRect = new Rect(startPoint, endPoint);}private static void ImageSourcePropertyChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e){var cutCustoms = d as ImageCutCustoms;var x = cutCustoms.ActualWidth / 3;var y = cutCustoms.ActualHeight / 3;cutCustoms.startPoint = new Point(x, y);cutCustoms.endPoint = new Point(x + 120, y + 120);cutCustoms.CutRect = new Rect(cutCustoms.startPoint,cutCustoms.endPoint);}}

源码地址

github:https://github.com/yanjinhuagood/WPFDevelopers.git

gitee:https://gitee.com/yanjinhua/WPFDevelopers.git

WPF开发者QQ群: 340500857 

blogs: https://www.cnblogs.com/yanjinhua

Github:https://github.com/yanjinhuagood

出处:https://www.cnblogs.com/yanjinhua

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

转载请著名作者 出处 https://github.com/yanjinhuagood

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

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

相关文章

php5.2 zengd,大对杀狗狗再犯低级错误 ZEN狂输200目笑翻棋友

弈城围棋讯 4月29日&#xff0c;DEEPZEN仍然不知疲倦的在弈城迎战各路高手。总体来讲&#xff0c;“狗狗”战绩非常优秀&#xff0c;截止今天凌晨为止&#xff0c;它的战绩为254胜43负&#xff0c;胜率为85.5%&#xff0c;强悍的一塌糊涂&#xff0c;但是&#xff0c;“狗狗”也…

专为小机械迷而造,培养STEM思维,千万别错过!物理机械力学知识边玩边学,5岁以上请入手...

▲数据汪特别推荐点击上图进入玩酷屋自从美国前总统奥巴马先生上任后对STEM教育理念重视提升到新的层次&#xff0c;全球掀起了一波又一波的STEM教育狂潮。北上广深等中小学开设STEM课程。全国《义务教育小学科学课程标准》加强综合科技知识项目&#xff0c;将力学类科技知识学…

fusioncharts同一页面显示2个仪表盘,且以java字符串作为xml数据

为什么80%的码农都做不了架构师&#xff1f;>>> fusioncharts同一页面显示2个仪表盘&#xff0c;且以java字符串作为xml数据 <% page contentType"text/html; charsetUTF-8" %> <%String path request.getContextPath(); %> <%String x…

读书 | 一切红利最终都是趋势红利

【读书总结】| 总结/Edison Zhou在去年年底就读完了刘润老师2016年出版的《趋势红利》&#xff0c;一直没有来得及做笔记整理&#xff0c;于是&#xff0c;这就来了。1所有红利最终都是趋势红利中国的企业近年来所处的环境正在发生系统性巨变&#xff0c;企业想要成功应变&…

oracle归档日志的概念,浅谈Oracle归档日志

什么是归档日志归档日志(Archive Log)是非活动的重做日志备份.通过使用归档日志,可以保留所有重做历史记录,当数据库处于ARCHIVELOG模式并进行日志切换式,后台进程ARCH会将重做日志的内容保存到归档日志中.当数据库出现介质失败时,使用数据文件备份,归档日志和重做日志可以完全…

好强大的仿生机械,这才是真正的黑科技!

全世界只有3.14 % 的人关注了数据与算法之美仿生机械就是模仿生物的形态、结构和控制原理设计制造出的功能更集中、效率更高并具有生物特征的机械。研究仿生机械的学科称为仿生机械学&#xff0c;它是20世纪60年代末期由生物学、生物力学、医学、机械工程、控制论和电子技术等学…

windows phone 8 的新特性

2019独角兽企业重金招聘Python工程师标准>>> windows phone 8 是微软windows phone系列操作系统的一次重大升级&#xff0c;在原有的基础上添加了许多新的特性。总体看来主要八中新的特性。&#xff08;Windows phone8 缩写WP8&#xff09; <1>硬件的升级 W…

oracle 数字处理函数,Oracle函数-单行函数-数字、日期、日期处理函数

函数的分类单行函数&#xff1a;一个input对应一个output&#xff0c;input和output存在一一对应的关系 如lower组函数&#xff1a;多个input&#xff0c;但是只对应一个output。如 sum()单行函数特点&#xff1a;每行返回一个结果&#xff0c;输入输出存在一一对应的关系能嵌套…

WPF 修改(优化)Menu菜单的样式

Menu菜单&#xff0c;在软件中使用率很高的一个控件。包含具有层级关系的一个或多个MenuItem作为子菜单。今天就来分享一个定义的菜单样式。看一下效果图&#xff1a;下面就来看看代码&#xff1a;本次代码&#xff0c;全部都在MainWindow.xaml内&#xff1a;<Window x:Clas…

世上最牛博士论文是这样的!

全世界只有3.14 % 的人关注了数据与算法之美第五牛博士论文就是在还没答辩之前已经发表在最好的期刊上&#xff0c;而且鉴于论文很长&#xff0c;该期刊必须像小说一样连载。实例&#xff1a;张五常博士论文《佃农理论》&#xff0c;当年在《法和经济学杂志》上连载四期。第四牛…

grep和egrep的一些简单用法

首先介绍grep的一些常见用法&#xff1a; grep&#xff1a;根据模式搜索文本&#xff0c;并将符合模式的文本行显示出来。 其基本格式为&#xff1a;grep [options] PATTERN [FILE...] 即&#xff1a;grep [选项] 匹配模式 [文件...]&#xff1b;其中&#xff0c;中括号表示该选…

WPF显示富文本emoji表情+文本(类似微信)

祝大家端午节安康&#xff01;WPF开发者QQ群&#xff1a; 340500857 前言 有小伙伴需要实现类似微信一样的气泡聊天emoji表情文本。欢迎转发、分享、点赞&#xff0c;谢谢大家~。 效果预览&#xff08;更多效果请下载源码体验&#xff09;&#xff1a;一、EmojiAndTextControl…

oracle未找到时区,Oracle ADF 未找到时区错误

最近在运行项目的时候,发现了一个问题.在初始化数据的时候,后台会报错,<_handleexception> ADF_FACES-60098:Faces 生命周期在阶段RENDER_RESPONSE 6中接收到未处理的异常错误oracle.jbo.JboException: JBO-29000: 捕获到意外的异常错误: java.sql.SQLDataException, msg…

要孩子逻辑清晰、善于思考,别忽视空间想象力的游戏锻炼!

▲数据汪特别推荐点击上图进入玩酷屋在之前的文章时&#xff0c;马斯提到数学存在一种现象叫“梯次掉队”&#xff0c;原因在于孩子的数学思维地基没有打牢。&#xff08;传送门&#xff09;提到初中孩子需要空间想象能力时&#xff0c;很多父母疑惑为何需要&#xff1f;关于这…

ORACLE数据加载加本,使用oracle sqlldr加载数据

oracle sqlldr 实验tab 分隔处理&#xff0c;空格分隔处理&#xff0c;逗号分隔处理日期列处理截断处理包含双引号处理列为空处理1.数据文件data.txt2012-01-01 10:01:01.001 "1"a"cc"2012-02-01 10:01:01.002 "2"bc"dd"2012-03-01 10…

ML.NET Cookbook:(16)什么是规范化?为什么我需要关心?

在ML.NET中&#xff0c;我们公开了许多参数和非参数算法[1]。通常&#xff0c;参数学习器对训练数据持有一定的假设&#xff0c;如果不满足这些假设&#xff0c;训练就会受到极大的阻碍&#xff08;有时甚至完全不可能&#xff09;。最常见的假设是所有特征的值大致相同&#x…

mysql查看当前连接数

命令&#xff1a; show processlist; 如果是root帐号&#xff0c;你能看到所有用户的当前连接。如果是其它普通帐号&#xff0c;只能看到自己占用的连接。 show processlist;只列出前100条&#xff0c;如果想全列出请使用show full processlist; mysql> show proce…

公摊面积取消闹乌龙,历史学家李学勤逝世,微软员工抗议国防大单,前摩拜CEO后花68万上学,这就是今天的大新闻。...

今天是2月25日农历正月廿一今天星期一大家看起来都好像很兴奋下面是今天的大新闻“公摊面积”要取消? 央视&#xff1a;这是错误理解(今日头条)近日有关“公摊面积”的新闻被刷屏。那么&#xff0c;这是否意味着&#xff0c;住宅交易面积将从建筑面积变为套内面积&#xff1f;…

oracle取位置,获取oracle trace文件路径

10g:/* 11g依然有效 */SELECT d.VALUE|| /|| LOWER (RTRIM (i.instance, CHR (0)))|| _ora_|| p.spid|| .trctrace_file_nameFROM (SELECT p.spidFROM sys.v$mystat m, sys.v$session s, sys.v$process pWHERE m.statistic# 1 AND s.sid m.sid AND p.addr s.paddr) p,(SE…

MySQL 删除数据的最好的方式

1 Drop table 命令 DROP TABLE 这个命令会删除整个表和数据&#xff0c;删除之后你就不能还原会之前的数据结构和数据了 2 DELETE * FROM Table DELETE * FROM Table 这个语句会移除数据&#xff0c;只留下自动增长的值&#xff08;id&#xff09;和其余的表结构。如果表很大那…