从WinRT相机捕获UI中检索文件内容

4

我正在尝试从相机捕获UI中获取压缩的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

我认为在这里根本不需要使用 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技术。


骰子游戏!感谢提示! - Ana Betts
1
注意:未来读者请注意,AsStream()扩展方法在System.IO命名空间中定义,因此请确保您有一个using System.IO;语句。 - Robert Levy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接