Получение содержимого файла из интерфейса WinRT Camera Capture - PullRequest
4 голосов
/ 19 сентября 2011

Я пытаюсь получить сжатые данные JPEG из пользовательского интерфейса захвата камеры, но меня сбивает с толку IInputBuffer. Вот что у меня есть:

private async void OnWebcamButton(object sender, RoutedEventArgs e)
{
    var captureUi = new CameraCaptureUI();
    var result = await captureUi.CaptureFileAsync(CameraCaptureUIMode.Photo);
    var file = await result.OpenForReadAsync();
    var reader = new DataReader(file);

    byte[] data = new byte[reader.UnconsumedBufferLength];
    await reader.LoadAsync(reader.UnconsumedBufferLength);
    reader.ReadBytes(data);

    // XXX: This is always zero
    Debug.Text = String.Format("Buffer is {0} bytes", data.Length);
}

Есть идеи, что я делаю не так?

1 Ответ

6 голосов
/ 19 сентября 2011

Я не думаю, что вам вообще нужна DataReader здесь.Попробуйте это:

using System.Runtime.InteropServices.WindowsRuntime; // for AsBuffer()
...
var file = await captureUi.CaptureFileAsync(CameraCaptureUIMode.Photo);
var stream = await result.OpenForReadAsync();
byte[] data = new byte[file.Size];
await stream.ReadAsync(data.AsBuffer(), (uint)data.Length, InputStreamOptions.None);

В качестве альтернативы вы можете использовать AsStream() метод расширения (от System.IO.WindowsRuntimeStreamExtensons), чтобы обернуть WinRT IInputStream как System.IO.Stream, а затем использовать обычные методы .NET.

...