private async void Button_Click(object sender, RoutedEventArgs e) { capture_element.Source = m_camera; m_camera.StartPreviewAsync(); //StorageFile file = await KnownFolders.DocumentsLibrary.CreateFileAsync("_exposure.jpg", CreationCollisionOption.ReplaceExisting); m_camera.AddEffectAsync(MediaStreamType.VideoPreview, "GrayscaleTransform.GrayscaleEffect", null); //m_camera.StartRecordToStorageFileAsync() float maxExp = m_camera.VideoDeviceController.ExposureCompensationControl.Max; float minExp = m_camera.VideoDeviceController.ExposureCompensationControl.Min; float step = m_camera.VideoDeviceController.ExposureCompensationControl.Step; TimeSpan maxExpControl = m_camera.VideoDeviceController.ExposureControl.Max; TimeSpan minExpControl = m_camera.VideoDeviceController.ExposureControl.Min; TimeSpan stepExp = m_camera.VideoDeviceController.ExposureControl.Step; TimeSpan value = m_camera.VideoDeviceController.ExposureControl.Value; var supportedVideoFormats = new List <string> { "nv12", "rgb32" }; var availableMediaStreamProperties = m_camera.VideoDeviceController.GetAvailableMediaStreamProperties(MediaStreamType.VideoRecord).OfType <Windows.Media.MediaProperties.VideoEncodingProperties>().Where(p => p != null && !String.IsNullOrEmpty(p.Subtype) && supportedVideoFormats.Contains(p.Subtype.ToLower())) .ToList(); Windows.Media.MediaProperties.VideoEncodingProperties previewFormat = availableMediaStreamProperties.FirstOrDefault(); //previewFormat.FrameRate.Numerator = 15; //previewFormat.FrameRate.Denominator = 1; //availableMediaStreamProperties.All; m_camera.VideoDeviceController.SetMediaStreamPropertiesAsync(MediaStreamType.VideoRecord, previewFormat); m_camera.VideoDeviceController.ExposureControl.SetAutoAsync(false); TimeSpan k = new TimeSpan(833); m_camera.VideoDeviceController.ExposureControl.SetValueAsync(minExpControl); await this.StreamToFile(); //m_camera.VideoDeviceController.ExposureCompensationControl.SetValueAsync(0); //m_camera.VideoDeviceController.ExposureCompensationControl.SetValueAsync(0.0f); //double exp; //bool b = m_camera.VideoDeviceController.Exposure.TryGetValue(out exp); // m_camera.VideoDeviceController.ExposureControl.SetValueAsync(new TimeSpan(1)) //m_camera.VideoDeviceController.Exposure.TrySetValue(0.00833); //m_camera.VideoDeviceController.ExposureControl.SetAutoAsync(false); //m_camera.VideoDeviceController.ExposureControl.SetValueAsync(new TimeSpan(10 * 2000)); // m_camera.VideoDeviceController.ExposureControl.SetValueAsync(minExpControl); }
// <SnippetAddOverlay> private void AddOverlay(MediaClip overlayMediaClip, double scale, double left, double top, double opacity) { Windows.Media.MediaProperties.VideoEncodingProperties encodingProperties = overlayMediaClip.GetVideoEncodingProperties(); Rect overlayPosition; overlayPosition.Width = (double)encodingProperties.Width * scale; overlayPosition.Height = (double)encodingProperties.Height * scale; overlayPosition.X = left; overlayPosition.Y = top; MediaOverlay mediaOverlay = new MediaOverlay(overlayMediaClip); mediaOverlay.Position = overlayPosition; mediaOverlay.Opacity = opacity; MediaOverlayLayer mediaOverlayLayer = new MediaOverlayLayer(); mediaOverlayLayer.Overlays.Add(mediaOverlay); composition.OverlayLayers.Add(mediaOverlayLayer); }
/// <summary> /// カメラ初期化(非同期) /// </summary> /// <returns></returns> private async Task InitWebCameraAsync() { try { //mediaCaptureオブジェクトが有効な時は一度Disposeする if (mediaCapture != null) { mediaCapture.Dispose(); mediaCapture = null; } //キャプチャーの設定情報を保持するインスタンスを作成 var captureInitSettings = new MediaCaptureInitializationSettings(); captureInitSettings.VideoDeviceId = ""; captureInitSettings.StreamingCaptureMode = StreamingCaptureMode.Video; //カメラデバイスの取得 var cameraDevices = await Windows.Devices.Enumeration.DeviceInformation.FindAllAsync( Windows.Devices.Enumeration.DeviceClass.VideoCapture); //取得結果に応じて分岐 if (cameraDevices.Count() == 0) //取得デバイスなしの場合 { Debug.WriteLine("No Camera"); //デバッグ文字列出力 return; //カメラがない場合は関数から出る } else if (cameraDevices.Count() == 1) //1個だけ見つかったとき { Debug.WriteLine("count1\n"); //デバッグ用のメッセージ captureInitSettings.VideoDeviceId = cameraDevices[0].Id; //見つけたデバイスIDを設定 } else //複数見つけたとき { Debug.WriteLine("countelse\n"); captureInitSettings.VideoDeviceId = cameraDevices[1].Id; //2個目のデバイスIDを設定 } //キャプチャーの準備 mediaCapture = new MediaCapture(); //キャプチャインスタンスを作成 await mediaCapture.InitializeAsync(captureInitSettings); //キャプチャ設定に従って設定を初期化する //ビデオストリームのエンコードに関する設定 Windows.Media.MediaProperties.VideoEncodingProperties vp = new Windows.Media.MediaProperties.VideoEncodingProperties(); Debug.WriteLine("before camera size\n"); //RasperryPiでは解像度が高いと映像が乱れるので小さい解像度にしている //ラズパイじゃなければ必要ないかも? /*vp.Width = 640; * vp.Height = 480; * vp.Subtype = "RGB24"; * * await mediaCapture.VideoDeviceController.SetMediaStreamPropertiesAsync(MediaStreamType.VideoPreview, vp);*/ //コントロールにキャプチャインスタンスをセット CaptureElement_webcam.Source = mediaCapture; //キャプチャーの開始 await mediaCapture.StartPreviewAsync(); Debug.WriteLine("Camera Initialized"); //指定周期のタイマを作成・起動 //コールバック関数にキャプチャインスタンスを渡す、遅延0ms、周期500ms this.Timer_capture = new System.Threading.Timer( new System.Threading.TimerCallback(TimerCapFlame), mediaCapture, 0, 500); } catch (Exception ex) { Debug.Write(ex.Message); } }