silverlight
发布时间:2022-05-04 发布网站:大佬教程 code.js-code.com
大佬教程收集整理的这篇文章主要介绍了【全面解析DeepZoom 之三】建立DeepZoom应用,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_
944_3@概述
【全面解析DeepZoom 之三】建立DeepZoom应用
周银辉 今天介绍一下如何建立一个DeepZoom应用。如果你用过DeepZoomComposer,你会发现在DeepZoomComposer中
导出的时候“CreateCollection ”选项。这里决定
【全面解析DeepZoom 之三】建立DeepZoom应用
周银辉
今天介绍一下如何建立
一个DeepZoom应用。如果你用过DeepZoomComposer,你会发现在DeepZoomComposer中
导出的时候“CreateCollection ”选项。这里决定了你导出的是一张整图还是
一个图片集合,关于导出整图,你
可以参考
大V的
初试Deep Zoom Composer(Step by Step|More Pictures)(超酷+必试) 这篇
文章,写得很不错(
建议你阅读一下,因为与其重复的内容我将省略了)。关于
图片集合下面会讲到。
与导出整图不一样,你不能这样使用:
<
@H_308_29
@multi
ScaleIR_942_11845@age
x:
Name=
"msi"
ViewportWidth=
"1.0"
source=
"/XXXX/info.bin"
@H_19_32
@mou
SELEftButtonDown=
"msi_MouSELEftButtonDown"
@H_19_32
@mou
SELEftButtonUp=
"msi_MouSELEftButtonUp"
@H_19_32
@mouseMove=
"msi_MouseMove"
/>
而应该将info
.bin替换成:items
.bin,在导出的
文件中你会找到该
文件,这表示你导出的是
一个集合。
这时运行
你的程序你变可以看到
一个图片集合
显示在那里了,但可惜的是没有任何交互。在那之前我们先了解一下
@H_308_29
@multi
ScaleIR_942_11845@age
的几个重要属性(我不知道是不是我的Silverlight SDK版本不对,在MultiScaleIR_942_11845@age中其关键的几个属性、方法与事件没有相关注释,所以有必要将我对这几个属性、方法、事件的理解列举一下)
source:即DeepZoomComposer导出的文件(单个文件为Info.bin,集合为Items.bin)
SubImages:子图片,如果DeepZoomComposer导出的为集合的话,其将集合中每个元素作为@L_861_0@multiScaleSubImage对象存储在这个集合中。对子图片的操作就全靠它了。
UsingSprings:是否启用其默认动画(就是那中很飘逸的感觉,取消则比较生硬了)
Viewport: 视口位置(可以简单理解成眼睛所在位置,有过3D编程经验的比较容易理解)
ViewportWidth:视口宽度,视口越宽看到的东西越到(感觉上离图片越远,或图片缩小了)
AspectRatio:宽高比。
ElementToLogicPoint():从元素坐标(物理坐标)转换为逻辑坐标 (元素坐标则是我们平时所说的普通坐标,逻辑坐标则是指元素左上角为0,0点,右下角为1,1点而言的相对坐标)
LogictoElementPoint():与上述相反。
ZoomAboutLogicPoint(double,double,doublE):按逻辑坐标缩放,第一个参数指定缩放增量,后两个参数指定缩放中心。
MotionFinished事件:动画结束(或者说当你操作图片或子图后其运动结束)
关于子图:
每个子图是@L_861_0@multiScaleSubImage对象,其在MultiScaleIR_942_11845@age的SubImages属性中
如何移动子图位置:
你可以通过指定该子图的ViportOrgin属性来指定它的位置,比如
subImage.ViportOrgin = new Point(x,y);
所以如果你想将子图像WPF中一样排列成Grid元素一样,没办法,一个一个计算x,y然后指定吧。
如何缩放子图:
你可以通过子图的ViewportWidth属性来控制,值越大子图就越小。
如何显示或隐藏子图:
没有visibility或相关属性,但你可以通过设置其Opacity(不透明度)来实现。
如何获取指定子图的位置和大小(Rect)
参考这个方法:
private
rect GetSubImageRect(MultiScaleIR_942_11845@age msi,
int
index)
{
if (index < 0 || index >= msi.SubImages.Count)
{
return rect.Empty;
}
MultiScaleSubImage image = msi.SubImages[index];
double scaleBy = 1 / image.ViewportWidth;
return new rect(-image.ViewportOrigin.X * scaleBy,
-image.ViewportOrigin.Y * scaleBy,
scaleBy,
(1 / image.AspectRatio) * scaleBy);
}
文章来源于
http://www.cnblog
s.com/zhouyinhui 版权归原作者所有
大佬总结
以上是大佬教程为你收集整理的【全面解析DeepZoom 之三】建立DeepZoom应用全部内容,希望文章能够帮你解决【全面解析DeepZoom 之三】建立DeepZoom应用所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。