我的问题是这个。如何从WP 8.1 WinRT中的相机预览图像中获取WriteableBitmap?
我以前在Silverlight中做过这个,但我似乎无法在WinRT中完成它...
我的目标是在相机预览图像中扫描条形码。我不想拍照并从那里扫描条形码。我想从相机预览中扫描条形码。
我像这样初始化我的相机:
// First get the rear camera
var _rearCamera = await GetCameraDeviceInfoAsync(Windows.Devices.Enumeration.Panel.Back);
_mediaCapture = new MediaCapture();
// Set up the initialization settings to use rear camera
await _mediaCapture.InitializeAsync(new MediaCaptureInitializationSettings
{
StreamingCaptureMode = StreamingCaptureMode.Video,
PhotoCaptureSource = PhotoCaptureSource.VideoPreview,
AudioDeviceId = string.Empty,
VideoDeviceId = _rearCamera.Id
});
然后我设置预览并开始在previewElement上显示它。
// Find the supported preview size that's closest to the desired size
var availableMediaStreamProperties =
_mediaCapture.VideoDeviceController.GetAvailableMediaStreamProperties(MediaStreamType.VideoPreview)
.OfType<VideoEncodingProperties>()
.Where(p => p != null && !String.IsNullOrEmpty(p.Subtype) && supportedVideoFormats.Contains(p.Subtype.ToLower()))
.OrderByDescending(p => p.Width)
.ToList();
_previewFormat = availableMediaStreamProperties.FirstOrDefault();
// Start Preview stream
await _mediaCapture.VideoDeviceController.SetMediaStreamPropertiesAsync(MediaStreamType.VideoPreview, _previewFormat);
_mediaCapture.SetPreviewRotation(VideoRotation.Clockwise90Degrees);
previewElement.Source = _mediaCapture;
await _mediaCapture.StartPreviewAsync();
但是现在我需要以某种方式在PreviewElement上获取相机图像的快照,这样我就可以将它发送到ZXing进行条形码解码。
我查看过无数个样本,但大多数是WP 8.0或WP 8.1 Silverlight ......
任何帮助都将不胜感激。
答案 0 :(得分:0)
要截取直播,您需要在C ++中编写Media Foundation Transform(MFT),以media extension的形式插入渲染管道。
Media extensions sample演示了编写此类媒体扩展程序。另请参阅Walkthrough: Creating a Windows Store app using WRL and Media Foundation
一旦你拥有框架,你应该能够将它传递给zxing进行处理。
答案 1 :(得分:0)
在查看Lumia Imaging SDK之后......我找到了Real-time Filter Demo for Windows and Windows 8.1的示例,这正是我在非常简单的代码中所需要的。
为了控制相机并做一个焦点,例如我可以简单地说:
VideoDeviceController vdc = (VideoDeviceController)_cameraPreviewImageSource.VideoDeviceController;
await vdc.FocusControl.FocusAsync();