Windows Phone 7中的可缩放图像

6
我正在尝试在我的Windows Phone 7应用程序中实现可缩放的图像(如下代码),但是它不起作用,图像没有显示出来。请问有人能指点一下我吗?这是正确的控件吗?如果是,那么我做错了什么?
        <controls:PivotItem Name="Header" Header="item1">
            <Grid>
                <MultiScaleImage Name="mainImage" />
            </Grid>
        </controls:PivotItem>

        var imageurl = loginxml.Descendants("response").Elements("submissions").Elements("submission").Elements("file_url_screen").First().Value;
        //imageurl = https://inkbunny.net///files/screen/165/165693_CobaltHusky_random_anatomy_doodles.png
        Header.Header = loginxml.Descendants("response").Elements("submissions").Elements("submission").Elements("title").First().Value;
         DeepZoomImageTileSource img = new DeepZoomImageTileSource(new Uri(imageurl));
        mainImage.Source = img;

编辑 通过阅读MultiScaleImage的MSDN,发现这不是要使用的控件。它需要特定的图像源(而不是位图/ jpg)。


你的意思是基于用户交互来放大图片吗? - softwaredeveloper
我希望它能够与手机中的照片库完全相同。您可以通过捏放来缩放。 - Tom Squires
不要使用网格,而是从一个ScrollViewer控件开始,并将图像添加到其中。使用触摸事件ManipulationStarted、Delta和Completed来缩放,根据Delta的值来放大或缩小图像。希望这可以帮助你。我知道市场上的放大镜应用程序就是这样做的。 - softwaredeveloper
关于图像无法显示的问题,您需要确定图像资源类型是否为 Content/Embedded Resource。您需要使用正确的路径在应用程序中定位图像。 - softwaredeveloper
@softwaredeveloper 这个图片是从网上下载的。为什么ScrollViewer比MultiScaleImage更好?你知道为什么MultiScaleImage不能工作吗?我宁愿了解问题,而不仅仅是更换技术。 - Tom Squires
我还没有使用过MSI。希望其他人能够提供帮助。关于从网络下载后图像无法显示的问题,本地图像是否能正确显示?您是将其保存到“ISOStore”中并从那里读取吗?它已经完全下载了吗? - softwaredeveloper
2个回答

8

DeepZoomImageTileSource的URL不是一个图片URL,而是指向一个列出用于深度缩放瓷砖的图像的XML文件的URL。

我使用Silverlight工具包实现了一个简单的可缩放图像,如下所示:

<Image Name="MainImage" RenderTransformOrigin="0.5,0.5" CacheMode="BitmapCache">
    <Image.RenderTransform>
        <CompositeTransform x:Name="transform" />
    </Image.RenderTransform>
    <toolkit:GestureService.GestureListener>
        <toolkit:GestureListener PinchStarted="OnPinchStarted" PinchDelta="OnPinchDelta" />
    </toolkit:GestureService.GestureListener>
</Image>

在代码中:

MainImage.Source = new BitmapImage(new Uri(url));

然后声明两个变量来控制你的角度和缩放:

double initialAngle;
double initialScale;

然后处理手势事件:

private void OnPinchStarted(object sender, PinchStartedGestureEventArgs e)
{
    initialAngle = transform.Rotation;
    initialScale = transform.ScaleX;
}

private void OnPinchDelta(object sender, PinchGestureEventArgs e)
{
    //transform.Rotation = initialAngle + e.TotalAngleDelta;
    transform.ScaleX = initialScale * e.DistanceRatio;
    transform.ScaleY = initialScale * e.DistanceRatio;
}

如果想要处理图像旋转,取消旋转行的注释。

Sam



网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接