一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C# - silverlight實現圖片局部放大效果的方法

silverlight實現圖片局部放大效果的方法

2021-12-29 13:25菩提樹下的楊過 C#

這篇文章主要介紹了silverlight實現圖片局部放大效果的方法,結合實例形式分析了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.圖片原始大小/左側小圖大小 = 右側可視區域大小/半透明矩形大小

關鍵代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
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#實現XML文件讀取

    C#實現XML文件讀取

    這篇文章主要為大家詳細介紹了C#實現XML文件讀取的相關代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    Just_for_Myself6702022-02-22
  • C#Unity3D實現虛擬按鈕控制人物移動效果

    Unity3D實現虛擬按鈕控制人物移動效果

    這篇文章主要為大家詳細介紹了Unity3D實現虛擬按鈕控制人物移動效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一...

    shenqingyu060520232410972022-03-11
  • C#C#通過KD樹進行距離最近點的查找

    C#通過KD樹進行距離最近點的查找

    這篇文章主要為大家詳細介紹了C#通過KD樹進行距離最近點的查找,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    帆帆帆6112022-01-22
  • C#C# 實現對PPT文檔加密、解密及重置密碼的操作方法

    C# 實現對PPT文檔加密、解密及重置密碼的操作方法

    這篇文章主要介紹了C# 實現對PPT文檔加密、解密及重置密碼的操作方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下...

    E-iceblue5012022-02-12
  • C#C#裁剪,縮放,清晰度,水印處理操作示例

    C#裁剪,縮放,清晰度,水印處理操作示例

    這篇文章主要為大家詳細介紹了C#裁剪,縮放,清晰度,水印處理操作示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    吳 劍8332021-12-08
  • C#WPF 自定義雷達圖開發實例教程

    WPF 自定義雷達圖開發實例教程

    這篇文章主要介紹了WPF 自定義雷達圖開發實例教程,本文介紹的非常詳細,具有參考借鑒價值,需要的朋友可以參考下...

    WinterFish13112021-12-06
  • C#C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題實例

    C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題實例

    這篇文章主要介紹了C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題,簡單描述了訪問者模式的定義并結合具體實例形式分析了C#使用訪問者模式解決長...

    GhostRider9502022-01-21
  • C#深入解析C#中的交錯數組與隱式類型的數組

    深入解析C#中的交錯數組與隱式類型的數組

    這篇文章主要介紹了深入解析C#中的交錯數組與隱式類型的數組,隱式類型的數組通常與匿名類型以及對象初始值設定項和集合初始值設定項一起使用,需要的...

    C#教程網6172021-11-09
主站蜘蛛池模板: 国产999在线观看 | 日韩国产欧美成人一区二区影院 | 星球大战成人h无删减版 | 日韩欧美中文在线 | 男人女人叉叉叉 | 欧美精品三区 | 2019中文字幕 | 成人伊在线影院 | 亚洲视频免 | 国产福利专区精品视频 | 精品一区二区三区视频日产 | 丁香成人社 | 奇米影视777最新在线 | 蜜桃免费| 车上小婕子系列辣文小说 | 大ji巴好好爽好深网站 | 二次元美女脱裤子让男人桶爽 | 四虎影院新网址 | 欧洲女同同性videos0 | 韩国三级在线观看 完整版 韩国三级视频网站 | 黄网久久 | 国产亚洲精品精品国产亚洲综合 | 护士xxxx| 涩涩屋视频在线观看 | 亚洲丰满模特裸做爰 | 暖暖 免费 高清 中文 日本 | 天天狠天天透天干天天怕处 | 成人欧美一区二区三区白人 | 亚洲va久久久噜噜噜久久狠狠 | 国产探花视频在线观看 | 98pao强力打造高清免费 | 99re这里只有精品视频 | 男同桌扒开女同桌胸罩喝奶 | 爱爱一级视频 | 日韩 国产 欧美 | 婷婷综合缴情亚洲五月伊 | 好紧好爽再叫浪一点点潘金莲 | 男男同志gaysxxx | 欧美日韩久久中文字幕 | 欧美国产日本高清不卡 | 性奶老妇 视频 |