如何将远程URL中的图像序列化到IsolateStorage或XML中?

7 浏览
0 Comments

如何将远程URL中的图像序列化到IsolateStorage或XML中?

我需要从远程URL下载图像并将它们序列化到隔离存储中,但是我在弄清楚如何使其工作方面遇到了困难。我目前正在将URI序列化为图像,并且可以使其工作,但是我想下载图像并将其存储在文件系统中,使用C#和Silverlight,有什么最好的方法来实现这一点呢。

我已经尝试找到一些方法来做到这一点,但它们太复杂了。如果可能的话,我可以将图像数据存储在XML中,如果这是一个解决方案,但我只想下载文件。桌面上的.NET有很多方法可以做到这一点,但我需要一个Silverlight的解决方案。

如果有任何示例可以演示这样的事情,那么这也可能有所帮助。这似乎是一个简单的问题,但我无法解决它,而且已经尝试了很多简化这个过程的方法,以便我可以将来自远程URL的图像保存到隔离存储中并异步进行。

我目前有一些可以做到这一点的代码,但我似乎无法简化它,如果需要的话,将在没有合适的替代方案发布后发布它。

0
0 Comments

如何将远程URL中的图像序列化到IsolateStorage或XML中?

问题的原因:

在某些情况下,我们可能需要将远程URL中的图像保存到本地存储或将其转换为XML格式。这可能是为了离线浏览、数据备份或其他目的。然而,我们可能不知道如何实现这个目标。

解决方法:

下面是一种解决方法,可以通过使用WebClient类和DownloadData方法来实现将远程URL中的图像序列化到IsolateStorage或XML中。

步骤1:引入所需的命名空间

在代码的开头,我们需要引入System.Net命名空间,以便使用WebClient类。

using System.Net;

步骤2:实例化WebClient类并下载图像数据

首先,我们需要创建WebClient类的实例,然后使用DownloadData方法从远程URL下载图像数据。在这个例子中,我们使用了Stack Overflow的网站图标作为示例。

WebClient client = new WebClient();
byte[] bytes = client.DownloadData("http://cdn.sstatic.net/stackoverflow/img/apple-touch-icon.png");

步骤3:将图像数据保存到IsolateStorage或转换为XML

根据需求,我们可以选择将图像数据保存到IsolateStorage中或将其转换为XML格式。

保存到IsolateStorage:

IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForApplication();
using (IsolatedStorageFileStream isoStream = new IsolatedStorageFileStream("image.png", FileMode.Create, isoStore))
{
    isoStream.Write(bytes, 0, bytes.Length);
}

转换为XML:

XDocument doc = new XDocument(
    new XElement("Image",
        new XElement("Data", Convert.ToBase64String(bytes))
    )
);
string xmlString = doc.ToString();

我们可以通过使用WebClient类的DownloadData方法从远程URL下载图像数据,并将其保存到IsolateStorage或转换为XML格式。这个解决方法可以帮助我们实现将远程URL中的图像序列化到IsolateStorage或XML中的需求。

0
0 Comments

问题:如何将远程URL的图像序列化到隔离存储或XML中?

原因:根据提供的代码,问题的出现是因为作者想要从远程URL获取图像,并将其保存到隔离存储中或将其序列化为XML。

解决方法:

1. 定义一个名为ImageGrabber的类,并添加一个GrabImage方法,该方法接受一个URL参数。

2. 在GrabImage方法中,创建HttpWebRequest对象,并设置请求的方法为POST。

3. 使用BeginGetRequestStream方法异步获取请求流,并指定一个RequestCallback回调函数。

4. 在RequestCallback回调函数中,使用BeginGetResponse方法异步获取响应流,并指定一个GetResponseCallback回调函数。

5. 在GetResponseCallback回调函数中,获取响应流,并使用ReadToEnd方法读取流中的字节,并将其保存到一个字节数组中。

6. 使用IsolatedStorageFile.GetUserStoreForApplication().CreateFile方法创建一个文件,并将字节数组写入该文件。

7. 文件将保存在隔离存储中的特定位置。

代码示例:

public class ImageGrabber
{
    public void GrabImage(string url)
    {
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
        request.Method = "POST";
        request.BeginGetRequestStream(RequestCallback, request);
    }
    
    private void RequestCallback(IAsyncResult asynchronousResult)
    {
        HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;          
        request.BeginGetResponse(GetResponseCallback, request);
    }
    
    private void GetResponseCallback(IAsyncResult asynchronousResult)
    {
        HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;
        HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asynchronousResult);
        Stream streamResponse = response.GetResponseStream();
        byte[] bytes = ReadToEnd(streamResponse);
        IsolatedStorageFile.GetUserStoreForApplication().CreateFile("file.png").Write(bytes, 0, bytes.Count());
    }
    
    private static byte[] ReadToEnd(Stream stream)
    {
        // 读取流中的字节并返回字节数组
    }
}

文件保存位置:

`{System drive}:\Users\{User Name}\AppData\LocalLow\Microsoft\Silverlight\is\{bunch of autogenerated folders}\file.png`

以上方法被认为是解决问题的最佳方案,并且获得了积极的回应。

0