玩转C科技.NET

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

导航

<2008年7月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

统计

公告

Subscribe to this feed Join My Community at MyBloglog!
Contact volnet online!

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

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

LiveMessenger:
<My Library>
These postings are provided "AS IS" with no warranties, and confer no rights.The information in this weblog is provided "AS IS" with no warranties, and confers no rights. This weblog does not represent the thoughts, intentions, plans or strategies of my employer. It is solely my opinion. Inappropriate comments will be deleted at the authors discretion. All code samples are provided "AS IS" without warranty of any kind, either express or implied, including but not limited to the implied warranties of merchantability and/or fitness for a particular purpose.

与我联系

常用链接

留言簿(4)

我参与的团队

我的标签

随笔分类(117)

随笔档案(103)

文章分类(14)

文章档案(15)

相册

家园建设

最新随笔

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜

初试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) 阅读(2199) 评论(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联系我
关闭