/// <summary> /// 停止预览 /// </summary> public static async Task StopPreview() { try { if (CameraPreviewSizeList != null) { CameraPreviewSizeList.Clear(); } CameraPreviewSizeList = null; if (CameraPhotoSizeList != null) { CameraPhotoSizeList.Clear(); } await CloseLowLagPhoto(); CameraPhotoSizeList = null; IsSupportROI = false; IsSupportContinuousCapture = false; IsSupportHWZoom = false; if (MainCamera != null) { try { await MainCamera.StopPreviewAsync(); } catch (Exception ex) { } try { MainCamera.Dispose(); } catch (Exception ex) { } } MainCamera = null; CurrentCamDevice = null; FailedIndex = 1; IsCanUseCamera = false; } catch (Exception ex) { } }
/// <summary> /// 设置分辨率 /// </summary> private static async Task SetSize() { try { var width = ConfigHelper.Info.CameraPhotoSizeWidth; var height = ConfigHelper.Info.CameraPhotoSizeHeight; if (IsHavePhotoStream == true) { //获得分辨率 CameraSizeInfo photoSize = null; foreach (var item in CameraPhotoSizeList) { if (item.Width == width && item.Height == height) { photoSize = item; break; } } if (photoSize == null) { var maxTag = CameraPhotoSizeList.Max(li => li.SizeTag); photoSize = CameraPhotoSizeList.FirstOrDefault(li => li.SizeTag == maxTag); } var photoRato = Convert.ToDouble(photoSize.Width) / photoSize.Height; var tempPreviewList = CameraPreviewSizeList.Where(li => Convert.ToDouble(li.Width) / li.Height == photoRato); CameraSizeInfo previewSize = null; if (tempPreviewList.Count() > 0) { var maxTag = tempPreviewList.Max(li => li.SizeTag); previewSize = tempPreviewList.FirstOrDefault(li => li.SizeTag == maxTag); } else { var maxTag = CameraPreviewSizeList.Max(li => li.SizeTag); previewSize = CameraPreviewSizeList.FirstOrDefault(li => li.SizeTag == maxTag); } if (previewSize == null) { return; } //设置 await MainCamera.VideoDeviceController.SetMediaStreamPropertiesAsync(MediaStreamType.VideoPreview, previewSize.Data); await MainCamera.VideoDeviceController.SetMediaStreamPropertiesAsync(MediaStreamType.Photo, photoSize.Data); } else { //获得分辨率 CameraSizeInfo nowSize = null; foreach (var item in CameraPreviewSizeList) { if (item.Width == width && item.Height == height) { nowSize = item; break; } } if (nowSize == null) { var maxTag = CameraPreviewSizeList.Max(li => li.SizeTag); nowSize = CameraPreviewSizeList.FirstOrDefault(li => li.SizeTag == maxTag); } //设置 await MainCamera.VideoDeviceController.SetMediaStreamPropertiesAsync(MediaStreamType.VideoPreview, nowSize.Data); } //获得设置分辨率 var settingVideoRes = (VideoEncodingProperties)MainCamera.VideoDeviceController.GetMediaStreamProperties(MediaStreamType.VideoPreview); CurrentPreviewW = settingVideoRes.Width; CurrentPreviewH = settingVideoRes.Height; //获得设置分辨率 if (IsPhotoFromImagePropStream == true) { var settingPhotoRes = (ImageEncodingProperties)MainCamera.VideoDeviceController.GetMediaStreamProperties(MediaStreamType.Photo); CurrentPhotoW = settingPhotoRes.Width; CurrentPhotoH = settingPhotoRes.Height; } else { var settingPhotoRes = (VideoEncodingProperties)MainCamera.VideoDeviceController.GetMediaStreamProperties(MediaStreamType.Photo); CurrentPhotoW = settingPhotoRes.Width; CurrentPhotoH = settingPhotoRes.Height; } //保存设置 if (ConfigHelper.Info.CameraPhotoSizeWidth != CurrentPhotoW || ConfigHelper.Info.CameraPhotoSizeHeight != CurrentPhotoH) { ConfigHelper.Info.CameraPhotoSizeWidth = CurrentPhotoW; ConfigHelper.Info.CameraPhotoSizeHeight = CurrentPhotoH; ConfigHelper.Save(); } } catch (Exception ex) { } }
/// <summary> /// 获得照片分辨率 /// </summary> private static void GetPhotoSize() { if (PhotoSource == PhotoCaptureSource.VideoPreview) { return; } var photoSizeList = MainCamera.VideoDeviceController.GetAvailableMediaStreamProperties(MediaStreamType.Photo); var imageSizeList = new List <ImageEncodingProperties>(); var videoSizeList = new List <VideoEncodingProperties>(); foreach (var item in photoSizeList) { if (item.Type == "Image") { var imageSize = (ImageEncodingProperties)item; if (imageSize.Width < AppDefaultHelper.CAMERA_VGA_WIDTH || imageSize.Height < AppDefaultHelper.CAMERA_VGA_HEIGHT) { continue; } imageSizeList.Add(imageSize); } else { var videoSize = (VideoEncodingProperties)item; if (videoSize.Width < AppDefaultHelper.CAMERA_VGA_WIDTH || videoSize.Height < AppDefaultHelper.CAMERA_VGA_HEIGHT) { continue; } var oldItem = videoSizeList.FirstOrDefault(li => li.Width == videoSize.Width && li.Height == videoSize.Height); if (oldItem == null) { videoSizeList.Add(videoSize); } } } if (CameraPhotoSizeList == null) { CameraPhotoSizeList = new List <CameraSizeInfo>(); } else { CameraPhotoSizeList.Clear(); } if (imageSizeList.Count > 0) { imageSizeList.Sort((Comparison <ImageEncodingProperties>)((p1, p2) => { if (p1 == null || p2 == null) { return(0); } uint pixels0 = p1.Height * p1.Width; uint pixels1 = p2.Height * p2.Width; if (pixels0 > pixels1) { return(1); } return((int)pixels0 == (int)pixels1 ? 0 : -1); })); foreach (var item in imageSizeList) { CameraPhotoSizeList.Add(new CameraSizeInfo(item, item.Width, item.Height)); } IsPhotoFromImagePropStream = true; } else if (videoSizeList.Count > 0) { videoSizeList.Sort((Comparison <VideoEncodingProperties>)((p1, p2) => { if (p1 == null || p2 == null) { return(0); } uint pixels0 = p1.Height * p1.Width; uint pixels1 = p2.Height * p2.Width; if (pixels0 > pixels1) { return(1); } return((int)pixels0 == (int)pixels1 ? 0 : -1); })); foreach (var item in videoSizeList) { CameraPhotoSizeList.Add(new CameraSizeInfo(item, item.Width, item.Height)); } IsPhotoFromImagePropStream = false; } }