Silverlight:ImageTools.ExtendedImage加载外部URL图像根本不工作

时间:2012-11-18 05:39:27

标签: image silverlight url

我正在使用ImageTools库(imagetools.codeplex.com)从外部网址加载图片。

<Canvas x:Name="LayoutRoot" Background="Blue"
        Width="466" Height="204" >

    <Image Name="theImage" />

    <Button x:Name="btnTest" Canvas.Top="0" Canvas.Left="-200" Click="btnTest_Click"
                Width="100" Height="23"
                Content="Test Button">
    </Button>

</Canvas>

初​​始化:

    public MainPage()
    {
        InitializeComponent();

        Encoders.AddEncoder<PngEncoder>();
        Decoders.AddDecoder<PngDecoder>();
        Encoders.AddEncoder<JpegEncoder>();
        Decoders.AddDecoder<JpegDecoder>();
    }

然后:

    private void btnTest_Click(object sender, RoutedEventArgs e)
    {
        ExtendedImage ei = new ExtendedImage();
        // ei.UriSource = new Uri(@"https://www.google.com/images/srpr/logo3w.png"); // NOT working
        ei.UriSource = new Uri(@"/Images/header.png", UriKind.Relative); // Working

        ei.LoadingCompleted += new EventHandler((ss, ee) =>
        {
            Dispatcher.BeginInvoke(() =>
            {
                theImage.Source = ei.ToBitmap();
            });
        });
    }

我发现加载本地文件/Image/header.png正在运行,但加载外部网址图片(https://www.google.com/images/srpr/logo3w.png)根本无效。

它表现得很疯狂:一旦我点击了测试按钮,LayoutRoot画布就会消失。

但是,根据这个讨论:http://imagetools.codeplex.com/discussions/250624 加载外部URL图像应该正常工作。

1 个答案:

答案 0 :(得分:0)

它可以与UriType相关吗?

相对,绝对RelativeOrAbsolute

ei.UriSource =
new Uri(@"https://www.google.com/images/srpr/logo3w.png"
,UriKind.RelativeOrAbsolute); // works ?

http://msdn.microsoft.com/en-us/library/system.urikind(v=vs.95).aspx

希望有所帮助!

编辑:您需要一个类似http://twitter.com/crossdomain.xml的文件,否则SL会正常抛出SecurityException。

对于跨域实现,请参阅

https://stackoverflow.com/a/1325011/413032

http://www.silverlighthack.com/post/2008/11/08/Silverlight-clientaccesspolicyxml-files-for-the-Enterprise-(Part-1-of-2).aspx