Windows phone 8 用于在CameraCaptureSequence中保存图像数据的MemoryStream为0,即使图像数据存在于CameraCaptureSequence中

Windows phone 8 用于在CameraCaptureSequence中保存图像数据的MemoryStream为0,即使图像数据存在于CameraCaptureSequence中,windows-phone-8,Windows Phone 8,我使用的是PhotoCaptureDevice类,我可以捕获相机帧,但是当我在将CameraCaptureFrame.CaptureSequence中的图像数据复制到MemoryStream中并将其保存在相机卷中时出错。这是我正在尝试做的代码片段 PhotoCaptureDevice cam; cam = await PhotoCaptureDevice.OpenAsync(<front/rear depending on user input>,<resolution

我使用的是PhotoCaptureDevice类,我可以捕获相机帧,但是当我在将CameraCaptureFrame.CaptureSequence中的图像数据复制到MemoryStream中并将其保存在相机卷中时出错。这是我正在尝试做的代码片段

PhotoCaptureDevice cam;    
cam = await PhotoCaptureDevice.OpenAsync(<front/rear depending on user input>,<resolution depends on user input>);

CameraCaptureSequence seq;
seq = cam.CreateCaptureSequence(1);

cam.SetProperty(KnownCameraGeneralProperties.PlayShutterSoundOnCapture, true);

MemoryStream captureStream1 = new MemoryStream();
seq.Frames[0].CaptureStream = captureStream1.AsOutputStream();//This stream is for saving the image data to camera roll

await cam.PrepareCaptureSequenceAsync(seq);
await seq.StartCaptureAsync();

bool a = seq.Frames[0].CaptureStream.Equals(0);//This value is false during debugging
if(capturestream1.Length>0)//This condition evaluates to false
{
MediaLibrary library = new MediaLibrary();
Picture picture1 = library.SavePictureToCameraRoll("image1", captureStream1);
}
else
{
//Logic to handle condition
}
photocapture装置凸轮;
cam=等待光电捕获设备。OpenAsync(,);
CameraCaptureSeq;
seq=cam.CreateCaptureSequence(1);
cam.SetProperty(KnownCameraGeneralProperties.PlayShutterSoundOnCapture,true);
MemoryStream captureStream1=新的MemoryStream();
seq.Frames[0].CaptureStream=captureStream1.AsOutputStream()//此流用于将图像数据保存到相机辊
等待cam.PrepareCaptureSequenceAsync(seq);
等待seq.startCaptureAync();
bool a=seq.Frames[0].CaptureStream.Equals(0)//调试期间此值为false
if(capturestream1.Length>0)//此条件的计算结果为false
{
MediaLibrary=新的MediaLibrary();
Picture picture1=library.SavePictureToCameraRoll(“image1”,captureStream1);
}
其他的
{
//处理条件的逻辑
}

正如我在注释中添加的那样,变量
boola
的计算结果为false,我通过调试代码进行了检查。但是由于某些原因,
capturestream1.Length
属性是0。

这里有一个关于如何用单个图像捕获序列并将该图像保存到MediaLibrary的代码片段。显然,这是这个API的一个小例子,因为序列非常适合捕获多个图像并将它们与后处理结合在一起

private async void MainPage\u已加载(对象发送方,RoutedEventArgs e)
{
使用(MemoryStream stream=new MemoryStream())
使用(var camera=wait PhotoCaptureDevice.OpenAsync(CameraSensorLocation.Back,
PhotoCaptureDevice.GetAvailableCaptureResolutions(CameraSensorLocation.Back.First())
{
var sequence=camera.CreateCaptureSequence(1);
sequence.Frames[0]。CaptureStream=stream.AsOutputStream();
camera.PrepareCaptureSequenceAsync(序列);
等待序列。StartCaptureAync();
stream.Seek(0,SeekOrigin.Begin);
使用(var library=new mediabrary())
{
SavePictureToCameraRoll(“currentImage.jpg”,stream);
}
}
}
运行此代码段时,可以看到存储在设备上的图像:


您可以在诺基亚的Camera Explorer应用程序中找到完整的工作示例,该应用程序演示了WP8摄像头API的端到端用例:

您好,您知道使用cameraCaptureSequence的一个实例可以存储的最大帧数是多少吗?我想写一个应用程序,以500万像素的分辨率快速拍摄30幅场景图像。你对我有什么建议吗?