全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

silverlight实现图片局部放大效果的方法

本文实例讲述了silverlight实现图片局部放大效果的方法。分享给大家供大家参考,具体如下:

很多购物平台中(比如京东购物),浏览产品详情时都有这种效果,前几天看到有朋友问SL能不能实现,当然可以

界面:

1.左侧小图片(用一个矩形Fill一张图片即可)
2.左侧半透明矩形
3.右侧大图片(用一个Canvas设置Clip裁剪可视区域作为蒙板,图片放置在Canvas中即可)

原理:

获取左侧半透明矩形的相对位置,然后动态调整右侧大图的Canvas.Left与Canvas.Top

需要知道以下技术点:

1.Clip的应用
2.如何拖动对象
3.拖动时的边界检测
4.动态调整对象的Canvas.Left与Canvas.Top属性

尺寸要点:

1.右侧大图可视区域与左侧半透明矩形的“长宽比例”应该相同
2.“图片原始尺寸长度比” 应该 “与左侧小图片长度比”相同
3.图片原始大小/左侧小图大小 = 右侧可视区域大小/半透明矩形大小

关键代码:

using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
namespace PartMagnifier
{
  public partial class MainPage : UserControl
  {
    bool trackingMouseMove = false;
    Point mousePosition;
    public MainPage()
    {
      // 为初始化变量所必需
      InitializeComponent();
    }
    private void LayoutRoot_Loaded(object sender, System.Windows.RoutedEventArgs e)
    {
      Adjust();
    }
    private void Rectangle_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
      FrameworkElement element = sender as FrameworkElement;
      mousePosition = e.GetPosition(element);
      trackingMouseMove = true;
      if (null != element)
      {
        element.CaptureMouse();
        element.Cursor = Cursors.Hand;
      }
      Adjust();
      Debug();
      sb.Begin();//标题动画,可去掉
    }
    private void Rectangle_MouseMove(object sender, MouseEventArgs e)
    {
      FrameworkElement element = sender as FrameworkElement;
      if (trackingMouseMove)
      {
        double deltaV = e.GetPosition(element).Y - mousePosition.Y;
        double deltaH = e.GetPosition(element).X - mousePosition.X;
        double newTop = deltaV + (double)element.GetValue(Canvas.TopProperty);
        double newLeft = deltaH + (double)element.GetValue(Canvas.LeftProperty);
        if (newLeft <= 10)
        {
          newLeft = 10;
        }
        if (newLeft >= 130)
        {
          newLeft = 130;
        }
        if (newTop <= 10) { newTop = 10; }
        if (newTop >= 85) { newTop = 85; }
        element.SetValue(Canvas.TopProperty, newTop);
        element.SetValue(Canvas.LeftProperty, newLeft);
        mousePosition = e.GetPosition(element);
        Adjust();
        if (mousePosition.X <= 0 || mousePosition.Y <= 0) { return; }
        Debug();
      }
    }
    private void Rectangle_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
    {
      FrameworkElement element = sender as FrameworkElement;
      trackingMouseMove = false;
      element.ReleaseMouseCapture();
      mousePosition.X = mousePosition.Y = 0;
      element.Cursor = null;
    }
    /// <summary>
    /// 调试信息
    /// </summary>
    void Debug()
    {
      txtResult.Text = "鼠标相对坐标:" + mousePosition.ToString() + "\n小框left:" + rect.GetValue(Canvas.LeftProperty) + ",小框top:" + rect.GetValue(Canvas.TopProperty) + "\n大图left:" + ((double)img.GetValue(Canvas.LeftProperty)).ToString("F0") + ",大图right:" + ((double)img.GetValue(Canvas.TopProperty)).ToString("F0");
    }
    /// <summary>
    /// 调整右侧大图的位置
    /// </summary>
    void Adjust()
    {
      double n = cBig.Width / rect.Width;
      double left = (double)rect.GetValue(Canvas.LeftProperty) - 10;
      double top = (double)rect.GetValue(Canvas.TopProperty) - 10;
      double newLeft = -left * n;
      double newTop = -top * n;
      img.SetValue(Canvas.LeftProperty, newLeft);
      img.SetValue(Canvas.TopProperty, newTop);
    }
  }
}

更多关于C#相关内容感兴趣的读者可查看本站专题:《C#图片操作技巧汇总》、《C#常见控件用法教程》、《WinForm控件用法总结》、《C#数据结构与算法教程》、《C#面向对象程序设计入门教程》及《C#程序设计之线程使用技巧总结》

希望本文所述对大家C#程序设计有所帮助。


# silverlight  # 图片  # 局部放大  # WPF实现图片合成或加水印的方法【2种方法】  # 深入分析WPF客户端读取高清图片卡以及缩略图的解决方法详解  # Silverlight将图片转换为byte的实现代码  # Silverlightbutton图片切换样式实例代码  # C#实现图片放大功能的按照像素放大图像方法  # C# 实现的图片盖章功能  # 支持拖拽、旋转、放缩、保存  # C#图片按比例缩放的实现代码  # c#图片缩放图片剪切功能实现(等比缩放)  # WPF/Silverlight实现图片局部放大的方法分析  # 程序设计  # 拖动  # 都有  # 相关内容  # 鼠标  # 感兴趣  # 数据结构  # 给大家  # 前几天  # 更多关于  # 所述  # 长宽  # 使用技巧  # 面向对象  # 所必需  # 小图  # 京东  # 操作技巧  # 大图片  # 讲述了 


相关文章: 定制建站流程步骤详解:一站式方案设计与开发指南  天津个人网站制作公司,天津网约车驾驶员从业资格证官网?  美食网站链接制作教程视频,哪个教做美食的网站比较专业点?  ppt制作免费网站有哪些,ppt模板免费下载网站?  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  如何高效生成建站之星成品网站源码?  如何高效完成独享虚拟主机建站?  音乐网站服务器如何优化API响应速度?  建站之星收费标准详解:套餐费用及年费价格表一览  模具网站制作流程,如何找模具客户?  如何快速生成专业多端适配建站电话?  零服务器AI建站解决方案:快速部署与云端平台低成本实践  如何获取PHP WAP自助建站系统源码?  如何用免费手机建站系统零基础打造专业网站?  如何确认建站备案号应放置的具体位置?  如何做网站制作流程,*游戏网站怎么搭建?  实现虚拟支付需哪些建站技术支撑?  如何基于云服务器快速搭建个人网站?  制作网站的软件下载免费,今日头条开宝箱老是需要下载怎么回事?  Swift中循环语句中的转移语句 break 和 continue  子杰智能建站系统|零代码开发与AI生成SEO优化指南  小型网站制作HTML,*游戏网站怎么搭建?  如何设计高效校园网站?  XML的“混合内容”是什么 怎么用DTD或XSD定义  宝塔新建站点报错如何解决?  建站之星3.0如何解决常见操作问题?  上海网站制作开发公司,上海买房比较好的网站有哪些?  C#如何使用XPathNavigator高效查询XML  佛山企业网站制作公司有哪些,沟通100网上服务官网?  简历在线制作网站免费版,如何创建个人简历?  无锡制作网站公司有哪些,无锡优八网络科技有限公司介绍?  网站制作多少钱一个,建一个论坛网站大约需要多少钱?  早安海报制作网站推荐大全,企业早安海报怎么每天更换?  如何打造高效商业网站?建站目的决定转化率  宁波自助建站系统如何快速打造专业企业网站?  装修招标网站设计制作流程,装修招标流程?  如何安全更换建站之星模板并保留数据?  高端建站三要素:定制模板、企业官网与响应式设计优化  Bpmn 2.0的XML文件怎么画流程图  常州企业建站如何选择最佳模板?  简单实现Android验证码  网站设计制作公司地址,网站建设比较好的公司都有哪些?  如何通过商城自助建站源码实现零基础高效建站?  实例解析angularjs的filter过滤器  如何选择高效稳定的ISP建站解决方案?  建站之星安全性能如何?防护体系能否抵御黑客入侵?  如何在Golang中实现微服务服务拆分_Golang微服务拆分与接口管理方法  盘锦网站制作公司,盘锦大洼有多少5G网站?  建站之星×万网:智能建站系统+自助建站平台一键生成  如何快速搭建安全的FTP站点? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。