【问题标题】:WP8: Download and save GIF to isolated storageWP8:下载 GIF 并将其保存到独立存储
【发布时间】:2014-07-13 13:24:57
【问题描述】:

我想从 URL 下载 GIF 并保存到 WP8 的独立存储中。我一直在尝试使用 imagetools 库来解码 GIF,然后转换为 jpeg,因为 silverlight 不支持 gif,我想稍后使用 webbrowser 控件显示保存的图像。我的代码:

        ExtendedImage image = new ExtendedImage();
        image.LoadingFailed += image_LoadingFailed;

        image.LoadingCompleted += (sender, e) =>
        {
            var isoStore = IsolatedStorageFile.GetUserStoreForApplication();


            if (filename.EndsWith(".gif", StringComparison.OrdinalIgnoreCase))
            {
                GifDecoder gifdecoder = new GifDecoder();
                JpegEncoder jpegencoder = new JpegEncoder();

                using (var stream = new IsolatedStorageFileStream("somefolder/" + filename, FileMode.Create, isoStore))
                {
                    gifdecoder.Decode(image, stream);
                    BitmapImage bitmap = new BitmapImage();
                    using (MemoryStream stream2 = new MemoryStream())
                    {
                        jpegencoder.Encode(image, stream2);
                        bitmap.SetSource(stream2);
                    }
                }  
            }

image.UriSource = new Uri(imageurl, UriKind.Absolute);

【问题讨论】:

    标签: c# windows-phone-8


    【解决方案1】:

    如果您将 gif 转换为 jpeg,您将丢失动画。如果您打算使用 Web 浏览器控件来显示图像,则根本不需要 ImageTools。您可以做的是,从远程位置下载 gif,将其保存到独立存储中,然后通过将图像路径注入 HTML 将其显示在 Web 浏览器控制器上。

    所以,这里是下载图像并将其保存到独立存储的示例代码。

        private string savedImagePath = string.Empty;
    
        private void SomeButton_Click(object sender, RoutedEventArgs e)
        {
            WebClient client = new WebClient();
            client.OpenReadCompleted += async (s, args) =>
            {
                using (IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForApplication())
                {
                    using (
                        IsolatedStorageFileStream fileStream = new IsolatedStorageFileStream("savedGifName.gif",
                            FileMode.Create, storage))
                    {
                        await args.Result.CopyToAsync(fileStream);
                        savedImagePath = fileStream.Name;
                    }
                }
    
    
            };
            client.OpenReadAsync(new Uri("http://www.example.com/someGIF.gif", UriKind.Absolute));
        }
    

    现在,您在 savedImagePath 中获得了独立存储中图像的路径。为了在 Web 浏览器控件上显示该图像,您可以执行以下操作:

        private void ViewImageInWebBrowserControl(string ImageURL)
        {
    
            string backgroundColor = "<body bgcolor=\"#000000\">"; // enter different hex value for different background color 
    
            string imageHTML = "<html><head><meta name=\"viewport\" " +
                "content=\"width=440\" id=\"viewport\" />" +
                "</head>" + backgroundColor + "<IMG SRC=\"" +
                ImageURL + "\"height=\"300\" width=\"300\"></body></html>";
    
            browserControl.NavigateToString(imageHTML); // browserControl is created in XAML which is not shown here
        }
    

    然后调用 ViewImageInWebBrowserControl(savedImagePath);构建 html 并在 Web 浏览器控件中显示 gif(现在位于隔离存储中)。

    希望这会有所帮助。

    【讨论】:

    • 有时把事情复杂化太容易了,这提醒我要“保持简单”。很有魅力,谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多