一起谈.NET技术,使用DeeepZoom Composer进行富图像应用的开发(翻译--2)

简介:   Deep Zoom程序设计     到目前为止,你已经见识了Deep Zoom Composer工具,也见到了Deep Zoom 多图像的浏览器应用程序。不过你可能还需要知道怎样设计这样的程序。  因此,在这一节中,你将能够在Silverlight中开发Deep Zoom程序,可以用Deep Zoom Composer工具来创建图像瓷片,而且你也能够将它们集成到你自己的Silverlight应用程序中,下面的过程将显示MultiScaleImage控件来展示这个过程。

  Deep Zoom程序设计

     到目前为止,你已经见识了Deep Zoom Composer工具,也见到了Deep Zoom 多图像的浏览器应用程序。不过你可能还需要知道怎样设计这样的程序。

  因此,在这一节中,你将能够在Silverlight中开发Deep Zoom程序,可以用Deep Zoom Composer工具来创建图像瓷片,而且你也能够将它们集成到你自己的Silverlight应用程序中,下面的过程将显示MultiScaleImage控件来展示这个过程。

  开发Deep Zoom程序

  1.使用Deep Zoom Composer工具新建一个命名为 SbSCh5_3的工程。

  2.添加两个图片到视图中。

  3.单击“导出(Export)”选项卡,选择“Empty Project+Source”模板。

image

  4.在导出过程完成后,单击“查看工程目录(View Project Folder)”,接着将打开Windows资源管理器,显示这个工程目录中的详细内容。

  5.双击“DeepZoomProject.sln”文件,在Visual Web Developer Express 中打开项目。由于Deep Zoom Composer工具是以旧的(Visual Studio 2008)资源代码格式作为输出目标,所以Visual Web Developer 会显示一个对话框询问你是否需要转换这个项目,依次单击每一个对话框的完成按钮。

  6. 定位到“解决方案浏览器”,选择并打开项目的MainPage.xaml文件。在XAML视图中的Grid元素下添加一个    MultiScaleImage控件:

 
 
< Grid x:Name ="LayoutRoot" Background ="White" >

< MultiScaleImage Width ="400" Height ="400"

Source
="GeneratedImages/dzc_output.xml" >

</ MultiScaleImage >

</ Grid >

 

  7. 这个控件的Source属性会得到一个警告的标记,你并不需要担心,出现这个警告是因为这个XAML是Silverlight项目的一部分,你的Silverlight程序有可能是在运行时才能得到这个路径,而你现在是在设计时查看的,它引用你存在于项目中资源,于是Source属性所引用的路径就不能解析到了。

  8.按F5键运行这个程序。你会看到Silverlight呈现了这些图像,不过你还不能和他交互。这是下一步要做的事。

关闭浏览器,确信Visual Web Developer没有在调试状态下。这是你能查看XAML视图,并且通过以下的一些步骤会图像能交互。

image

  和图像交互

  1.由于刚才见到的Source属性的警告标记,Visual Web Developer 不允许你拖动控件到设计器中。删除MultiScaleImage标签的Source属性。设置MultiScaleImage控件的x:Name属性的值为“msi”,如下所示:

 
 
< Grid x:Name ="LayoutRoot" Background ="White" >

< MultiScaleImage Width ="400" Height ="400"

x:Name
="msi" ></ MultiScaleImage >

</ Grid >

 

  2.将两个StackPanel控件拖放到XAML视图中,像下面那样编辑代码:

 
 
< Grid x:Name ="LayoutRoot" Background ="White" >

< MultiScaleImage Width ="400" Height ="400"

x:Name
="msi" ></ MultiScaleImage >

< StackPanel >< StackPanel ></ StackPanel ></ StackPanel >

</ Grid >

 

  3.在StackPanel控件里添加Orientation参数,设置第一个StackPanel的Orientation为Vertical,第二个StackPanel的Orientation为Horizontal:

 
 
< Grid x:Name ="LayoutRoot" Background ="White" >

< MultiScaleImage Width ="400" Height ="400"

x:Name
="msi" ></ MultiScaleImage >

< StackPanel Orientation ="Vertical" >

< StackPanel Orientation ="Horizontal" ></ StackPanel >

</ StackPanel >

</ Grid >

 

  4.将MultiScaleImage控件作为第一个StackPanel控件的孩子:

 
 
< Grid x:Name ="LayoutRoot" Background ="White" >

< StackPanel Orientation ="Vertical" >

< MultiScaleImage Width ="400" Height ="400"

x:Name
="msi" ></ MultiScaleImage >

< StackPanel Orientation ="Horizontal" ></ StackPanel >

</ StackPanel >

</ Grid >

 

  5.在水平StackPanel加入四个按钮控件。命名分别为: btnLeft, btnRight, btnUp,

btnDown。设置他们的Content属性值依次为:Left, Right, Up,和Down

 
 
< Grid x:Name ="LayoutRoot" Background ="White" >

< StackPanel Orientation ="Vertical" >

< MultiScaleImage Width ="400" Height ="400"

x:Name
="msi" ></ MultiScaleImage >

< StackPanel Orientation ="Horizontal" >

< Button x:Name ="btnLeft" Content ="Left" ></ Button >

< Button x:Name ="btnRight" Content ="Right" ></ Button >

< Button x:Name ="btnUp" Content ="Up" ></ Button >

< Button x:Name ="btnDown" Content ="Down" ></ Button >

</ StackPanel >

</ StackPanel >

</ Grid >

 

  6.现在切换到代码视图并打开MainPage.xaml.cs 文件,你首先需要添加代码来设置MultiCScaleImage控件的Source属性,那么他可以在运行时呈现。(还记得吗,你从XAML视图中移除了Source属性来避免产生错误,所以你需要在后置代码中来加上来)在C#中,这是很容易的事情,我们只需要创建一个Uri对象并且标明这个XML的位置即可。现在你能使用Uri对象来初始化一个新的DeepZoomImageTileSource实例。设置MultiScaleImage控件的Source属性为这个新的DeepZoomImageTileSource对象。是不是听起来更简单呢?事实上,你能在MainPage类的构造器中做,如下所示:

Uri uri = new Uri("GeneratedImages/dzc_output.xml", UriKind.RelativeOrAbsolute);

msi.Source = new DeepZoomImageTileSource(uri);

  7.您还可以添加Click事件处理程序或其它任何事件处理程序中的代码,而不是在 XAML 中指定他们。 这个例子键入 btnUp.Click +=,你就会看到一个提示询问您是否要创建默认事件处理程序。 按 Tab 键来完成,声明,然后同样的方式创建其它的事件处理程序。 这是一个很大的快捷方式 !事件声明应如下所示:

btnUp.Click += new RoutedEventHandler(btnUp_Click);

  8.新的事件处理方法看起来就像下面那样:

 
 
voidbtnUp_Click(object sender, RoutedEventArgs e)
{
throw new NotImplementedException();
}

 

提示:您了解 MultiScaleImage 控件的工作方式是非常重要的。 你指定您目前正在查看设计的一部分, ViewPortOrigin在控件的顶部左侧告诉你能查看哪部分的图像。当您第一次加载图像时,将 ViewPortOrigin 设置为 0,0。 换而言,左上控件的角落也是图像的左上角。 若要操作视图您只需更改 ViewPortOrigin 点。 请注意,原点的值之间0 和 1,0 是顶部或左侧的每个轴和 1 是底部或右侧的的轴其中,轴是宽度或图片的高度。 因此,要你的图像中移动缩放后的区域,您需要更改 ViewPointOrigin 坐标的 Y 值。

  9. 现在,您可以添加一些代码的事件处理程序。 将此代码放到了 btnUp_Click
处理程序:

 
 
voidbtnUp_Click( object sender, RoutedEventArgs e)
{
Point o
= msi.ViewportOrigin;
o.Y
+= 0.1 ;
msi.ViewportOrigin
= o;
}

 

  10. 作为一个的练习,你现在添加其他三个按钮的 Click 事件。从左移动右,操作点的 X 属性。

  11. 现在请返回并添加名为 btnInbtnOut 的两个新的按钮。 您将使用这些放大的图像。

  12.btnIn按钮的Click事件添加处理程序,将你的btnUp的Click事件在MainPage的构造函数中指定它。

  13.添加一个类级别的变量-在类声明的下面,而不是在MainPage()方法中-定义zoom变量:

double zoom = 1.0;

  14. VWDE会创建一个btnIn_Click 方法为了缩放到场景中,你乘以大于1的zoom变量。接着调用ZoomAboutLogicalPoint方法,将这个新的zoom变量传递给它并且设置一个缩放中心点。在下面的例子中使用了以原点作为缩放中心。

voidbtnIn_Click(object sender, RoutedEventArgs e)

{

zoom *= 1.3;

msi.ZoomAboutLogicalPoint(zoom,

msi.ViewportOrigin.X, msi.ViewportOrigin.Y);

}

  15.现在你能运行你的应用程序。点击“In”按钮你会缩放图像。在这个例子中你可以尝试用同样的方式放大图像。

提示:当你使用Deep Zoom Composer工具时,如果你选择导出为“Deep Zoom Classic+Source”模板时,你会得到一个包括所以代码的Visual Studio解决方案。它提供全体验的Deep Zoom实验,包括鼠标和鼠标滚轮事件是你能够在图像上进行鼠标操作。

  Silverlight照片合成(Photosynth)

  照片合成(Photosynth)是使您可以从不同的角度获取一些相同图片并将它们合成同一个场景中的三维模拟技术。试想你站在一个房间里。你拍一张照片的了的门,然后向左转一点并拍了另一张照片。第二张照片中,可能会有门一部分。照片合成技术可以检测的重叠和缝合成一个完整图像。

  最终结果将提供一个模拟站在房间的体验。 用户环绕这个场景, 照片合成技术计算出要呈现的最佳图片,并转换这些图片,尽可能模拟出他们站在房间里的效果!

  下图是创建的具有在拍的照片的照片合成项目的一个示例一小联盟游戏,摄影师(我)站在基线附近。现场由多个图像组成 — — 注意在哪里光和颜色级别是不同。如果你在场景中移动,图像的高亮会变化。当你单击图像的中心,你能有效地移动场景并参观它。如果使用更多的图片,项目中可以看得更宽大。

image

  你也能像在Deep Zoom 那样缩放图像。这个图像是通过http://www.photosynth.net来处理的,不过你能添加一个基于Silverlight的Viewer控件到你自己的应用程序中。

  创建照片合成(Photosynth)

  开始之前,你需要同一个场景中的一组图片。如果你没有,可以通过数字摄像机捕捉一些。最容易的方式是:站在同一个点,旋转180度来捕捉有重叠的一组图片。

imageimage

  提示:图片如何重叠。两个图片中,在椅子的前面,地板上面的窗体轮廓线上有一点儿不同。而照片合成技术就可以使用这些特征来决定摄像机的视点。然而,如果没有一个Windows Live ID,可以在http://www.live.com.申请一个。http://www.photosynth.net需要这个ID来登录创建和上传你的图片。

  安装PhotosynthCreation工具

  在你登陆到Photosynth后,你会看到主页,它包括一个Photosynths数字(所谓的“synths”短名字)标记,在屏幕的顶端你会看到一个“创建(Create)”链接。

  安装PhotosynthCreation

  1.单击“创建”链接,它会定位到http://photosynth.net/create.aspx.如果你还没有安装Photosynth创建工具,你在屏幕中间会看到一个Photosynth按钮。

  2.单击“Install Photosynth”按钮,不久你会看到Photosynth文件下载,单击“运行”按钮下载并安装Photosynth工具。

image

  3.这个工具会下载并安装。注意到这并不是一个由Silverlight实现的Photosynth查看器。这是一个使用认证Photosynths的Windows应用程序。你最终的目的不是要应用程序查看你的图像—这是Silverlight做的事。

  4.接下来安装向导会指导你安装创建工具。

  5.当你做了这些事情后,浏览http://photosynth.net/create.aspx站点。这次,你会在屏幕的顶端看到一个“创建一个合成”的按钮

  使用合成创建器(Synth Creator)

  现在你已经安装了创建器,你可以单击http://photosynth.net/create.aspx 上的“创建”按钮来创建一个新的合成器(synth)项目。这一部分你讲通过一些步骤来创建你自己的合成项目。

  创建一个新的合成项目

  1. 进入到 http://photosynth.net/create.aspx 并且单击“创建”按钮。

  2. Photosynth会提示你签入,使用你自己的Live ID签入。

image

  3.在签入后,你会看到“创建合成”对话框。单击“添加照片”按钮并选择你需要加入到项目中的所有图片。这时你会在你的窗体中看到前面那样的现示。

  4.并且在你的图片上添加一些标记、填写描述信息,可见性以及照片的合适的权限。在你完成这些字段后,“合成(Synth)”按钮会变成可用。

  提示:在你的合成项目中至少需要选择3张图片。

  5.单击“创建”按钮,Photosynth会开始上传并处理你的合成项目.这可能花费数分钟。

image

  6.当这个过程完成以后,单击“查看”按钮,你能看到这个合成。在你上传完成以后,在同一位置也会显示一个“取消”按钮,你现在已经创建了第一个Photosynth!很好。

  7.为了添加一个高亮(一个特殊图像的快捷方式),选择右上角的“高亮”选项卡。接着使用Photosynth查看器导航到你需要高亮的图像并添加一个高亮。下面的图像显示了一个添加了几个高亮Photosynth项目。

image

  8.完成以后单击“保存”按钮,你现在可以分享你的合成项目了。

  分享你的Synths

  共享您的 synths 是一个简单的操作。 人们也可以在Photosynth.net发现他们,创建你的合成完成以后,你可以指定的一个特殊的标记或者可以创建一个的链接嵌入到您的网站或博客上来共享 Photosynth。 这两种方式基本上是相同。

  在线分享synths

  1. 进入到 http://photosynth.net 并且签入。

  2. 单击屏幕顶上你的名字(这个链接为”” “Signed in as:<你的名字>”)。

  3.单击屏幕顶端的“合成”按钮。

  4.你能看见你所创建的synths.选择一个你想要分享的synth。

  5.在synth项目的底部,你会看到一些让你分享代码的嵌入式代码,甚至你可以将synth加入到你的收藏夹中,这个嵌入链接用HTML代码以IFrame标签的方式将Photosynth查看器嵌入到你的引用的页中。您可以粘贴此HTML代码到网页中。

image

  6.分享图标为你的synth创建一个查看器的URI,因此,您可以复制这个URI成即时消息或电子邮件发送出去。

  7.单击“分享”图标并且复制这些文本,他们看起来像下面这样:

http://photosynth.net/view.aspx?cid=d7de4242-db75-4cbe-ae09-

100908205b0d&m=false&i=0:0:20&c=1.00941:-0.546529:-0.0530795&z=

177.390922003041&d=-1.99872539837712:-1.04816317761388:-0.530711994658234&p=

0:0&t=Falseasd

  8. 提示: CID= 这个URI处理过程中的参数. 这个CID是一个唯一的GUID,它将标识一个独有的synth.

你需要保存一份这个URI的副本。 下一节中您将需要这个CID嵌入 Silverlight 查看器的自定义网页。 嵌入了该查看器消除了使用一个 IFrame 的需要。 该 CID 用于通过 JavaScript API 允许您构建一个围绕合成器应用程序。

   未完待续

目录
相关文章
|
11天前
|
C# Windows
一款.NET开源、简洁易用的Windows桌面小说阅读应用
一款.NET开源、简洁易用的Windows桌面小说阅读应用
|
11天前
|
人工智能 开发框架 量子技术
【专栏】.NET 技术:驱动创新的力量
【4月更文挑战第29天】.NET技术,作为微软的开发框架,以其跨平台、开源和语言多样性驱动软件创新。它在云计算、AI/ML、混合现实等领域发挥关键作用,通过Azure、ML.NET等工具促进新兴技术发展。未来,.NET将涉足量子计算、微服务和无服务器计算,持续拓宽软件开发边界,成为创新的重要推动力。掌握.NET技术,对于开发者而言,意味着握有开启创新的钥匙。
|
11天前
|
人工智能 量子技术 C#
【专栏】.NET 开发:开启数字化新时代
【4月更文挑战第29天】.NET开发在数字化新时代中发挥关键作用,借助跨平台能力、高性能和现代编程语言支持,如C#,助力企业实现数字化转型。通过企业级应用开发、移动应用和云计算集成,.NET加速业务流程和提升用户体验。未来,.NET将涉足AI、ML、MR/AR及量子计算,持续推动技术创新和数字化转型。开发者应提升技能,适应高性能需求,把握发展机遇。
|
11天前
|
缓存 监控 算法
【专栏】.NET 开发:实现卓越性能的途径
【4月更文挑战第29天】本文探讨了.NET开发中的性能优化,强调了理解性能问题根源和使用分析工具的重要性。基础优化包括代码优化(如减少计算、避免内存泄漏)、资源管理及选择合适算法。高级策略涉及并行编程、缓存策略、预编译(AOT)和微服务架构。持续性能测试与监控是关键,包括性能测试、监控分析和建立优化反馈循环。开发者应持续学习和实践性能优化,以构建高性能应用。
|
11天前
|
开发框架 .NET C#
【专栏】理解.NET 技术,提升开发水平
【4月更文挑战第29天】本文介绍了.NET技术的核心概念和应用,包括其跨平台能力、性能优化、现代编程语言支持及Web开发等特性。文章强调了深入学习.NET技术、关注社区动态、实践经验及学习现代编程理念对提升开发水平的重要性。通过这些,开发者能更好地利用.NET构建高效、可维护的多平台应用。
|
11天前
|
机器学习/深度学习 vr&ar 开发者
【专栏】.NET 技术:引领开发新方向
【4月更文挑战第29天】本文探讨了.NET技术如何引领软件开发新方向,主要体现在三方面:1) 作为跨平台开发的先锋,.NET Core支持多操作系统和移动设备,借助.NET MAUI创建统一UI,适应物联网需求;2) 提升性能和开发者生产力,采用先进技术和优化策略,同时更新C#语言特性,提高代码效率和可维护性;3) 支持现代化应用架构,包括微服务、容器化,集成Kubernetes和ASP.NET Core,保障安全性。此外,.NET还不断探索AI、ML和AR/VR技术,为软件开发带来更多创新可能。
|
11天前
|
开发框架 Cloud Native 开发者
【专栏】剖析.NET 技术的核心竞争力
【4月更文挑战第29天】本文探讨了.NET框架在软件开发中的核心竞争力:1) .NET Core实现跨平台与云原生技术的融合,支持多操作系统和容器化;2) 提升性能和开发者生产力,采用JIT、AOT优化,提供C#新特性和Roslyn编译器平台;3) 支持现代化应用架构,包括微服务和容器化,内置安全机制;4) 丰富的生态系统和社区支持,拥有庞大的开发者社区和微软的持续投入。这些优势使.NET在竞争激烈的市场中保持领先地位。
|
11天前
|
开发框架 .NET 开发者
【专栏】领略.NET 技术的创新力量
【4月更文挑战第29天】.NET技术自ASP.NET起历经创新,现以.NET Core为核心,展现跨平台能力,提升性能与生产力,支持现代化应用架构。.NET Core使开发者能用同一代码库在不同操作系统上构建应用,扩展至移动和物联网领域。性能提升,C#新特性简化编程,Roslyn编译器优化代码。拥抱微服务、容器化,内置安全机制,支持OAuth等标准。未来.NET 6将引入更快性能、Hot Reload等功能,预示着.NET将持续引领软件开发潮流,为开发者创造更多机会。
|
11天前
|
物联网 vr&ar 开发者
【专栏】.NET 技术:为开发注入活力
【4月更文挑战第29天】本文探讨了.NET技术的创新,主要体现在三个方面:1) .NET Core实现跨平台开发革命,支持多种操作系统和硬件,如.NET MAUI用于多平台UI;2) 性能提升与生产力飞跃,C#新特性简化编程,JIT和AOT优化提升性能,Roslyn提供代码分析工具;3) 引领现代化应用架构,支持微服务、容器化,内置安全机制。未来,.NET 7将带来更多新特性和前沿技术整合,如量子计算、AI,持续推动软件开发创新。开发者掌握.NET技术将赢得竞争优势。
|
11天前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
50 0