Преобразование ленты изображений в BitmapImage в Windows Phone и Silverlight - PullRequest
0 голосов
/ 02 декабря 2011

В настоящее время у меня возникают проблемы с преобразованием строки изображения, полученной из Feed в BitmapImage в Windows Phone 7.1. Я использую oData Northwind sample http://services.odata.org/Northwind/Northwind.svc/Categories/.

Это одна из сущностей из категорий.

<entry>
<id>http://localhost:32026/Northwind/Northwind.svc/Categories(1)</id>
<title type="text" />
<updated>2011-11-20T20:36:50Z</updated>
- <author>
<name />
</author>
<link rel="edit" title="Category" href="Categories(1)" />
<link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Products" type="application/atom+xml;type=feed" title="Products" href="Categories(1)/Products" />
<category term="NorthwindModel.Category" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />
- <content type="application/xml">
- <m:properties>
<d:CategoryID m:type="Edm.Int32">1</d:CategoryID>
<d:CategoryName>Beverages</d:CategoryName>
<d:Description>Soft drinks, coffees, teas, beers, and ales</d:Description>
<d:Picture m:type="Edm.Binary">...{data here}.....</d:Picture>
</m:properties>
</content>
</entry>

Я использую этот код ниже для преобразования строки рисунка в BitmapImage, но получаю «Неуказанная ошибка» .. Я также тестировал в Silverlight 5 Я не получил ошибку, но не могу отобразить изображение. Это проблема кодирования или что-то еще?

public void LoadData() {

            HttpWebRequest request =
                (HttpWebRequest)HttpWebRequest.Create(@"http://services.odata.org/Northwind/Northwind.svc/Categories/");
            request.Method = "GET";
            request.BeginGetResponse(new AsyncCallback(ReadCallback), request);

        }

        private void ReadCallback(IAsyncResult result) {

            Deployment.Current.Dispatcher.BeginInvoke(() => {
                HttpWebRequest request = (HttpWebRequest)result.AsyncState;
                HttpWebResponse response = request.EndGetResponse(result)
                                                as HttpWebResponse;

                XNamespace nsBase = "http://services.odata.org/Northwind/Northwind.svc/Categories/";
                XNamespace d = "http://schemas.microsoft.com/ado/2007/08/dataservices";
                XNamespace m = "http://schemas.microsoft.com/ado/2007/08/dataservices/metadata";
                XNamespace atom = "http://www.w3.org/2005/Atom";

                if (response.StatusCode == HttpStatusCode.OK) {
                    var xdoc = XDocument.Load(response.GetResponseStream());
                    foreach (var entity in xdoc.Descendants(atom + "entry")) {
                        var properties = entity.Element(atom + "content")
                                               .Element(m + "properties");

                        byte[] byteArray = Convert.FromBase64String(properties.Element(d + "Picture").Value);
                        var bitmapImage = new BitmapImage() { CreateOptions = BitmapCreateOptions.DelayCreation };
                        MemoryStream stream = new MemoryStream(byteArray);
                        //stream.Read(byteArray, 0, Convert.ToInt32(stream.Length));
                        //stream.Seek(0, SeekOrigin.Begin);
                        bitmapImage.SetSource(stream);

                        var category = new CategoryModel() {
                            Id = Convert.ToInt32(properties.Element(d + "CategoryID").Value),
                            Name = properties.Element(d + "CategoryName").Value,
                            Description = properties.Element(d + "Description").Value,
                            Picture = bitmapImage
                        };
                        Items.Add(category);
                    }
                }
                else {
                    MessageBox.Show("Exception");
                }
            });

        }

1 Ответ

0 голосов
/ 27 декабря 2011
...