玩转C科技.NET

每天都在学习,每天都在退步 为什么?世界发展太快! 怎么办?加快学习速度! 如何做?关注.NET社区 进阶中……

导航

<2008年8月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
31123456

统计

公告

Subscribe to this feed
Contact volnet online!

MSN群MyMSDN技术讨论群
群号:www.msdn@hotmail.com
Windows Live Alerts
欢迎大家踊跃加入讨论任何与技术有关的问题。
————————————
欢迎给我发送邮件:
volnet@tom.com
[标题格式]:[TO玩转C科技]<您的用户名/匿名>[<主题>]
————————————

 
您可以直接Gmail联系我噢!(Gtalk/Mail)
开机自启动,天天都在线哦!

LiveMessenger:
<My Library>

与我联系

搜索

 

常用链接

留言簿(4)

我参与的团队

我的标签

随笔分类(119)

随笔档案(105)

文章分类(15)

文章档案(15)

相册

家园建设

最新随笔

积分与排名

  • 积分 - 148552
  • 排名 - 243

最新评论

阅读排行榜

评论排行榜

初试Deep Zoom Composer(Step by Step|More Pictures)(超酷+必试)

10_FinalEffect

今天看到周兄的【全面解析DeepZoom 之一】酷!Deep Zoom的介绍,觉得实在是酷,就开始动手做了一下,做的不好,凑合着看吧。周兄是给大家全面解析,我只是做着玩的,所以叫做简单示范……

准备

1.Visual Studio 2008

2.Deep Zoom Composer(http://blogs.msdn.com/expression/archive/2008/03/05/download-the-preview-of-the-deep-zoom-composer.aspx)

3.Silverlight beta2

4.图片若干

步骤

1.打开Deep Zoom Composer,新建Project,Import图片,图片将如图显示在Deep Zoom Composer的右侧

1_Import

2.点击Compose,然后将右侧的图片摆放到中间的面板上,注意到下方有一些布局工具,大家可以用来做图片对齐,摆放完的图片将如图所示。

2_Compose

3.点击Export,导出图片,给它一个命名,点Export按钮即可。我这里起名为Demo1Export

3_Export

4.打开Visual Studio 2008,新建一个Silverlight项目,选择一个测试项目,我这里选择一个Web Application Project作为测试项目。

4_SilverlightProject

5.我们之前用Deep Zoom Composer导出的文件的文件夹内有个source images\OutputSdi的文件夹,将它Copy到我们用VS创建的Web项目的ClientBin文件夹下(可能需要先编译一次Web项目,注意不是Sliverlight项目,而是它的测试工程中)

5_ClientBin 6_OutputSdi

6.导入文件后的项目如下所示。注意ClientBin文件夹。

7_Solution

7.点击Page.xaml,修改代码如下:

<UserControl x:Class="SA_DeepZoomComposerDemo1.Page"
    xmlns="http://schemas.microsoft.com/client/2007" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" >
    <Grid
    x:Name="LayoutRoot"
    Background="AliceBlue">

        <MultiScaleImage
              x:Name="msi"
              ViewportWidth="1.0"
              Source="/demo1export/info.bin" MouseLeftButtonDown="msi_MouseLeftButtonDown" MouseLeftButtonUp="msi_MouseLeftButtonUp" MouseMove="msi_MouseMove"/>
       </Grid>
</UserControl>

这里因为我暂时没研究出怎么控制鼠标滚轮,所以没法做出那种滚动的效果(时间太迟了,不想去找了)……注意MultiScaleImage节点下的相关设置。我用于取代鼠标滚轮的做法是使用一个按钮来激活是否放大缩小。代码有点生硬,大家自己改造……

运行效果:

8_StaticEffect

试着将ViewportWidth修改为2.0,再次运行,效果将变为:

9_ChangeViewportWidth

8.点击Page.xmal.cs文件,修改代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;

namespace SA_DeepZoomComposerDemo1
{
    public partial class Page : UserControl
    {
        public Page()
        {
            InitializeComponent();
            new MouseWheelHelper(msi).Moved += new EventHandler<MouseWheelEventArgs>(msi_Scroll);
        }

        Mouse _m = new Mouse();

        private void msi_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            _m.DownPosition = e.GetPosition(msi);
        }

        private void msi_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            _m.UpPosition = e.GetPosition(msi);
            msi.ViewportOrigin = new Point(msi.ViewportOrigin.X + _m.UpInterval.X, msi.ViewportOrigin.Y + _m.UpInterval.Y);
        }

        private void msi_MouseMove(object sender, MouseEventArgs e)
        {
            _m.MovePosition = e.GetPosition(msi);
        }

        private void msi_Scroll(object sender, MouseWheelEventArgs e)
        {
            Point p = GetCenter();
            if (e.Delta > 0)
            {
                msi.ZoomAboutLogicalPoint(1.1, p.X, p.Y);
            }
            else
            {
                msi.ZoomAboutLogicalPoint(0.9, p.X, p.Y);
            }
        }

        private Point GetCenter()
        {
            double centreX = msi.Width / 2;
            double centreY = (msi.Width / msi.AspectRatio) / 2; //
            return msi.ElementToLogicalPoint(new Point(centreX, centreY));
        }
    }
}

值得注意的是ZoomAboutLogicalPoint方法(试一下吧,试了你就知道……)

这里用到了MouseWheelHelper类,大家可以从http://blois.us/Silverlight/Scrolling2/MouseWheelHelper.cs下载,并添加到项目中,具体用法我就不再赘述了……

9.另外需要你添加一个Mouse类,

using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;

namespace SA_DeepZoomComposerDemo1
{
    public class Mouse
    {
        public Point DownPosition
        {
            get;
            set;
        }
        public Point UpPosition
        {
            get;
            set;
        }
        public Point MovePosition
        {
            get;
            set;
        }
        public Point UpInterval
        {
            get
            {
                return new Point((DownPosition.X - UpPosition.X) / 1000, (DownPosition.Y - UpPosition.Y) / 1000);
            }
        }
    }
}

10.运行程序,得到下面的效果:

10_FinalEffect

总结

有许多需要修改的地方,不过通过这个简单的示例你应该知道http://memorabilia.hardrock.com/的效果并不至于难道哪里去,Deep Zoom Composer为我们封装的API太强大了,让我们不需要花费多少体力就可以做出很酷的效果了。还犹豫什么?快点开始用Silverlight2吧……

PS

因为包括了大量的图片,所以没法打包上传了,有需要Source Code的同志留下邮箱吧(放一个无图片版本的给大家下载添加图片请参考步骤1到5。),我会尽快发送的……

posted on 2008-04-07 04:05 volnet(可以叫我大V) 阅读(2291) 评论(15)  编辑 收藏 所属分类: Silverlight

评论

#1楼  2008-04-07 08:19 InkMarks [未注册用户]

hello ,I hope to get it ,my email is luxiaoli2002@gmail.com. Thanks   回复  引用    

#2楼  2008-04-07 08:41 lz [未注册用户]

支持,我也照例子做了一个,鼠标效果无效,liyangxiu2002@163.com   回复  引用    

#3楼  2008-04-07 08:50 丁一      

很好, 很喜欢..   回复  引用  查看    

#4楼  2008-04-07 09:05 周银辉      

Great Work   回复  引用  查看    

#5楼 [楼主] 2008-04-07 09:44 volnet(可以叫我大V)      

@InkMarks
@lz
已经发送到邮箱了,看看吧……

@丁一
@周银辉
谢谢噢:-)   回复  引用  查看    

#6楼  2008-04-07 10:29 icod [未注册用户]

按楼主的步骤,测试通过,非常强大!! 鼠标滚轮我在测试中是自动支持的   回复  引用    

#7楼  2008-04-07 15:27 感動常在      

鼠标效果无效   回复  引用  查看    

#8楼 [楼主] 2008-04-07 16:18 volnet(可以叫我大V)      

@感動常在
不是吧?我测试的结果是可以的,要不我把完整版发给你?   回复  引用  查看    

#9楼  2008-04-07 19:54 三老虎 [未注册用户]

最牛80后
http://cache.baidu.com/c?m=9d78d513d9d437aa4f9ae3690c66c0171e43f3622bd6a01f7dc39238841428563367f4ba5735600fc4b60c7070d85e28e9e74074207323a3dc88d64587fdd46a388954296d4cd60005d36ef39c0364d620e759edae0ee7cda16fccb382839e491290084420dbed8f500611c16df01226e3d1c30e4a01&p=c97f8e1397904eac42bd9b7b52&user=baidu   回复  引用    

#10楼 [楼主] 2008-04-07 21:47 volnet(可以叫我大V)      

@三老虎
楼上发的东西很强大啊,虽然跟本主题没什么关系……哈哈   回复  引用  查看    

#11楼  2008-05-05 20:50 李天宇 [未注册用户]

可以吧带图片的示例发给我吗?谢谢您:-)   回复  引用    

#12楼 [楼主] 2008-05-06 10:49 volnet(可以叫我大V)      

@李天宇
已经给您发送咯   回复  引用  查看    

#13楼  2008-05-08 14:02 Hillng [未注册用户]

谢谢楼主,在VS2008 debug 通过了。可是放到服务器上显示为空白。本地直接打开(不是通过IIS)那个HTML文件正常,远程打开HTML也是空白。   回复  引用    

#14楼 [楼主] 2008-05-08 18:01 volnet(可以叫我大V)      

@Hillng
这个情况是因为你的xap(silverlight文件)在你的IIS里面没有注册MIME Type的缘故,你加一个xap的类型就可以了。如果*.ASPX的不可以,换那个HTML的就可以了。

xap的MIME Type是xapapplication/x-silverlight[来自网络]

感谢您的支持,如果还有什么问题,欢迎再次留言。   回复  引用  查看    


标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-04-07 21:49 编辑过
 
 
使用Live Messenger联系我
关闭