public MainApplication(ProcessDetection processDetection, List <ClientMap> clientMapList, Settings appSettings) { this.AppSettings = appSettings; InitializeBackgroundWorker(); this.processDetection = processDetection; this.ClientMapping = clientMapList.AsEnumerable(); IEnumerable <MonitorInfo> monitors = MonitorEnumerationHelper.GetMonitors(); IEnumerable <MonitorInfo> primMons = from primaryMonitor in monitors where primaryMonitor.IsPrimary == true select primaryMonitor; MonitorInfo monitor = primMons.FirstOrDefault(); GraphicsCaptureItem item = CaptureHelper.CreateItemForMonitor(monitor.Hmon); switch (Settings.AppRunMode) { case SettingsAppRunMode.MockGame: this.mockImage = new Mat(Settings.MockImageGame); break; case SettingsAppRunMode.MockLauncher: this.mockImage = new Mat(Settings.MockImageLauncher); break; } if (item != null) { this.StartCaptureFromItem(item); } }
private Bitmap CaptureRectangleDirect3D11(IntPtr handle, Rectangle rect, bool captureCursor = false) { var captureMonRegions = new List <ModernCaptureMonitorDescription>(); Bitmap bmp; if (rect.Width == 0 || rect.Height == 0) { return(null); } // 1. Get regions and the HDR metadata information foreach (var monitor in MonitorEnumerationHelper.GetMonitors()) { if (monitor.MonitorArea.IntersectsWith(rect)) { var screenBoundCopy = monitor.MonitorArea.Copy(); screenBoundCopy.Intersect(rect); captureMonRegions.Add(new ModernCaptureMonitorDescription { DestGdiRect = screenBoundCopy, HdrMetadata = HdrMetadataUtility.GetHdrMetadataForMonitor(monitor.DeviceName), MonitorInfo = monitor, CaptureCursor = captureCursor, }); } } // 2. Compose a list of rects for capture var catpureItem = new ModernCaptureItemDescription(rect, captureMonRegions); // 3. Request capture and wait for bitmap // 3.1 Determine rects and transform them to DirectX coordinate system // 3.2 Capture and wait for content // 3.3 Shader and draw passes // 3.4 Datastream pass, copy var d3dCapture = ModernCaptureSignletonManager.Instance.Take(); bmp = d3dCapture.CaptureAndProcess(catpureItem); ModernCaptureSignletonManager.Instance.Release(); return(bmp); }