zoukankan      html  css  js  c++  java
  • WPF DeepZoom 研究记录

    以前搞silverlight的时候deepzoom挺酷的,这几天玩WPF的时候居然发现不支持deepzoom。这不是开玩笑么。google了几回,找到个开源的deepzoom for wpf 。这个控件配合Deep Zoom Composer确实可以实现。不过貌似只能用单张图片导出。

    image

    image

    不过这样只能依靠Deep Zoom Composer,如果是动态的图片呢?不方便。于是反编译了下Deep Zoom Composer生气。大概研究了下,没有注释看的我蛋疼啊==!。

    折腾了一下午终于实现了图片的导出,不过只能导出一张,几张合并的时候还是不行,先这样吧。

    public  class DZImageHelper
       {
           public  static  void CreateImage(string dest)
           {
               var imgList = new List<Image>();
               imgList.Add( new Image("E:\\IMGTEST\\1.jpg"));
    
               var creator = new SparseImageCreator();
               SetCommonImageCreatorParams(creator);
    
               try
               {
                   creator.Create(imgList, dest + "\\output");
               }
               catch (Exception ex)
               {
                   throw ex;
               }
           }
    
           private static void SetCommonImageCreatorParams(CreatorBase creator)
           {
               creator.TileFormat = ImageFormat.Jpg;
               creator.ImageQuality = 0.5;
               creator.TileOverlap = 1;
               creator.TileSize = 64;
           }
       }
    窗体:
    <Window x:Class="DeepZoomForWPF.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:Controls="clr-namespace:DeepZoom.Controls;assembly=DeepZoom" Title="MainWindow" Height="600" Width="1000"
             Loaded="Window_Loaded">
        <Grid>
            <Controls:MultiScaleImage x:Name="msi" Width="Auto" Height="Auto"/>
        </Grid>
    </Window>
    
    后台代码:
    using System;
    using System.Windows;
    using DeepZoom;
    
    
    namespace DeepZoomForWPF
    {
        /// <summary>
        /// MainWindow.xaml 的交互逻辑
        /// </summary>
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
    
                string dest = AppDomain.CurrentDomain.BaseDirectory;
                DZImageHelper.CreateImage(dest);
            }
    
            private void Window_Loaded(object sender, RoutedEventArgs e)
            {
                string url = AppDomain.CurrentDomain.BaseDirectory + "output.xml";
                this.msi.Source = new DeepZoomImageTileSource(new Uri( url, UriKind.Absolute));
            }
        }
    }
    
    imageimage

    注:需要导入三个DLL

    image

    QQ群:1022985150 VX:kklldog 一起探讨学习.NET技术
    作者:Agile.Zhou(kklldog)
    出处:http://www.cnblogs.com/kklldog/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    Python中的赋值(复制)、浅拷贝与深拷贝
    review
    Python网络编程
    云计算网络 ASW DSW CSW LSW
    Python文件操作 I/O
    RSI 指标
    python 常见模块
    Python模块和包
    读利弗莫尔
    GDP、CPI、M2
  • 原文地址:https://www.cnblogs.com/kklldog/p/2354497.html
Copyright © 2011-2022 走看看