2014-10-24 1 views
3

Согласно this, следующий код может быть использован для преобразования массива байтов в BitmapImage:Почему я получаю «System.Array» не содержит определения для «AsBuffer» с этим кодом WinRT?

public static async Task<BitmapImage> ByteArrayToBitmapImage(this byte[] byteArray) 
{ 
    if (byteArray != null) 
    { 
     using (var stream = new InMemoryRandomAccessStream()) 
     { 
      await stream.WriteAsync(byteArray.AsBuffer()); 
      var image = new BitmapImage(); 
      stream.Seek(0); 
      image.SetSource(stream); 
      return image; 
     } 
    } 
    return null; 
} 

Однако, я получаю, "„System.Array“не содержит определения для„AsBuffer“и не может быть найден метод расширения «AsBuffer», принимающий первый аргумент типа «System.Array» (вам не хватает директивы использования или ссылки на сборку?) «

Является ли это то, что назначение« var stream »тоже неопределенный (неявный ввод), и мне нужно указать конкретный тип данных для «потока» var? Что-то другое, чем System.Array?

Может быть, это из "Windows Store Apps Succinctly" является ключом: Буферы/массивы байтов-System.Runtime.InteropServices.WindowsRuntime. WindowsRuntimeBufferExtensions: методы расширения этого класса предоставляют способы перемещения между массивами байт .NET и содержимым буферов WinRT, которые отображаются как реализации IBuffer.

... но если это так, для меня недостаточно информации, чтобы знать, что с этим делать. Вместо «TMI» это «NEI» (недостаточно информации).

ответ

8

Проблема в том, что компилятор не находит extension methodAsBuffer(). Убедитесь, что у вас есть ссылка на пространство имен System.Runtime.InteropServices.WindowsRuntime, т.е.

using System.Runtime.InteropServices.WindowsRuntime; 

Вы также должны add a reference к соответствующему DLL, если вы еще не:

пространства имен: System.Runtime.InteropServices. WindowsRuntime

Монтаж: System.Runtime.WindowsRuntime (в System.Runtime.WindowsRuntime.dll)

+1

Я пытался добавить Reference, но получил сообщение об ошибке, которое нельзя добавить, поскольку оно автоматически ссылается на систему сборки. Поэтому я добавил оператор using и компилирует его. Поэтому меня удивляет, если нужная ссылка уже существует, почему VS не знает этого и дает мне пункт контекстного меню «Resolve»? Во всяком случае, все хорошо, что хорошо кончается, я думаю - спасибо! –