wpf下实现图片的放大缩小和平移

本文介绍了一种新的图片缩放算法,该算法以图片为中心进行缩放操作,避免了传统方法在缩放至原尺寸以下时可能出现的跳跃现象。通过实验证明,此算法效果良好,具有较高的实用价值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考文章:http://blog.youkuaiyun.com/hsienhua/article/details/7859191
//-------------------------------------------------------------------------------------------------

原文中在小于原尺寸时直接退出了,额... 原文是以光标为中心缩放,但是在小于原尺寸的时候,情况不乐观。 下面的函数是以图片为中心进行缩放,不会出现跳跃的情况 ,亲测可用!

//curPoint : e.GetPosition(UIElement) private void DowheelZoomEx(TransformGroup group, double scale, Point curPoint) { ScaleTransform transform = group.Children[0] as ScaleTransform; TranslateTransform transform1 = group.Children[1] as TranslateTransform; #if IMAGE_CENTER if (transform.ScaleX + scale < 1) { //return; } transform.ScaleX += scale; transform.ScaleY += scale; double nW = Image1.ActualWidth; double nH = Image1.ActualHeight; transform1.X -= scale * nW / 2; transform1.Y -= scale * nH / 2; #else //以光标所在点为中心进行放大缩小 double deltaScale = 0.0; if (delta > 0) { deltaScale = transform.ScaleX * 0.1; if (Math.Abs(transform.ScaleX + deltaScale) >= 16.0) { return; } } else { deltaScale = transform.ScaleX * (-0.1); if (Math.Abs(transform.ScaleX + deltaScale) <= 0.2) { return; } } transform.CenterX = nW / 2; transform.CenterY = nH / 2; transform.ScaleX += deltaScale; transform.ScaleY = Math.Abs(transform.ScaleX); transform1.X += deltaScale * (transform.CenterX - point.X); if (transform.ScaleX > 0.0) { transform1.Y += deltaScale * (transform.CenterY - point.Y); } else { transform1.Y -= deltaScale * (transform.CenterY - point.Y); } #endif }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值