我正在尝试从Camera Capture 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);
}
任何想法我做错了什么?
答案 0 :(得分: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技术。