本机代码中的 PhotoCaptureDevice

本文关键字:PhotoCaptureDevice 本机代码 | 更新日期: 2023-09-27 18:36:01

在Windows Phone 8上,我希望用本机代码拍摄相机,但是在最后阶段我无法从IOutputStream中提取信息。

在 C# 中,我们编写:

MemoryStream image = new MemoryStream();
MemoryStream imagePreview = new MemoryStream();
cameraCaptureSequence.Frames[0].CaptureStream = image.AsOutputStream();
cameraCaptureSequence.Frames[0].ThumbnailStream = imagePreview.AsOutputStream();
await cameraCaptureSequence.StartCaptureAsync();

从现在图像流有捕获图像的信息,我可以渲染它。

在 C++/Cx 中,我需要做同样的事情,但更多直到捕获捕获图像的字节*,这是我的代码:

Windows::Phone::Media::Capture::CameraCaptureSequence^ cameraCaptureSequence;
IBuffer^ image;
return concurrency::create_async([this]()
{
    cameraCaptureSequence->Frames->GetAt(0)->CaptureStream = reinterpret_cast<IOutputStream^>(image);
    create_task( m_camera->PrepareCaptureSequenceAsync(cameraCaptureSequence) ).wait();
    create_task( cameraCaptureSequence->StartCaptureAsync() ).then([this]()
    {
    }
}

从最基本的事情开始,我希望了解如何将捕获的图像流的结果"保存"到IBuffer^中,更好地获取内部字节*缓冲区。

谢谢

本机代码中的 PhotoCaptureDevice

您可以通过 ICameraCaptureFrameNative 访问 Native 代码中捕获的图像中的像素数据。实现接口的对象是通过 COM 获取的。获得对象后,使用 MapBuffer() 访问 BYTE * 数组。

请注意,以这种方式获得的像素数据是NV12格式,而不是人们期望的JPEG或RGB。

   #include <Windows.Phone.Media.Capture.Native.h>
   CameraCaptureFrame^ frame = m_cameraCaptureSequence->Frames->GetAt(0);
   pNativeFrame = NULL;
   HRESULT hr = reinterpret_cast<IUnknown*>(frame)->QueryInterface(__uuidof(ICameraCaptureFrameNative ), (void**) &pNativeFrame);
   create_task( m_camera->PrepareCaptureSequenceAsync(m_cameraCaptureSequence) ).wait();
   create_task( m_cameraCaptureSequence->StartCaptureAsync() ).then([this]()
   {
         DWORD bufferSize =0;
         BYTE * pBuffer = NULL;
         pNativeFrame->MapBuffer(&bufferSize, &pBuffer); // Pixels are in pBuffer. 
         // Unmap() the buffer before capturing another image.

ICameraCaptureFrameNative 无法访问包含预览的纹理?

如果你想从IBuffer访问数据,请看这里:http://msdn.microsoft.com/en-us/library/windows/apps/dn182761.aspx

对于您的情况,我认为您需要一个实现IOutputStream的类。也许InMemoryRandomAccessStream?

相关文章:
  • 没有找到相关文章