From 057efe78a9bffb9a00ea424eeeb9a9ded3f0cbb9 Mon Sep 17 00:00:00 2001 From: FishmanTheMurloc <162452111+FishmanTheMurloc@users.noreply.github.com> Date: Wed, 2 Apr 2025 21:39:56 +0800 Subject: [PATCH] =?UTF-8?q?=E9=9D=99=E6=80=81=E5=8C=96SharpDX.Direct3D11.D?= =?UTF-8?q?evice=E7=9A=84=E5=AE=9E=E4=BE=8B=E3=80=81=E6=81=A2=E5=A4=8DGrap?= =?UTF-8?q?hicsCapture.cs=E7=9A=84Stop=E6=96=B9=E6=B3=95=E4=B8=AD=E8=A2=AB?= =?UTF-8?q?=E6=B3=A8=E9=87=8A=E7=9A=84=E6=B8=85=E7=90=86frame=E7=9A=84?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=EF=BC=8C=E4=BB=A5=E6=9C=9F=E9=99=8D=E4=BD=8E?= =?UTF-8?q?WGC=E5=8F=8D=E5=A4=8D=E5=90=AF=E5=81=9C=E7=9A=84=E6=97=B6?= =?UTF-8?q?=E8=A7=82=E5=AF=9F=E5=88=B0=E7=9A=84=E5=86=85=E5=AD=98=E6=B3=84?= =?UTF-8?q?=E6=BC=8F=EF=BC=9BWGC=E6=96=B9=E6=B3=95=E4=BC=A0=E5=85=A5?= =?UTF-8?q?=E7=9A=84=E6=88=AA=E5=9B=BE=E4=BC=BC=E4=B9=8E=E6=98=AF4?= =?UTF-8?q?=E9=80=9A=E9=81=93=E7=9A=84=EF=BC=8Cpaddle=E5=90=83=E4=B8=8D?= =?UTF-8?q?=E8=BF=9B=EF=BC=8C=E6=95=85=E5=81=9A4=E8=BD=AC3=E5=A4=84?= =?UTF-8?q?=E7=90=86=20(#1386)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Core/Recognition/OCR/PaddleOcrService.cs | 11 +++++++++ .../Graphics/GraphicsCapture.cs | 24 +++++++++---------- .../Graphics/Helpers/Direct3D11Helper.cs | 4 +++- 3 files changed, 26 insertions(+), 13 deletions(-) diff --git a/BetterGenshinImpact/Core/Recognition/OCR/PaddleOcrService.cs b/BetterGenshinImpact/Core/Recognition/OCR/PaddleOcrService.cs index 1d084d3c..2dc7a648 100644 --- a/BetterGenshinImpact/Core/Recognition/OCR/PaddleOcrService.cs +++ b/BetterGenshinImpact/Core/Recognition/OCR/PaddleOcrService.cs @@ -6,6 +6,7 @@ using Sdcb.PaddleOCR.Models; using System; using System.Diagnostics; using System.IO; +using static Vanara.PInvoke.Gdi32; namespace BetterGenshinImpact.Core.Recognition.OCR; @@ -68,6 +69,16 @@ public class PaddleOcrService : IOcrService } public PaddleOcrResult OcrResult(Mat mat) + { + if (mat.Channels() == 4) + { + using var mat3 = mat.CvtColor(ColorConversionCodes.BGRA2BGR); + return _OcrResult(mat3); + } + return _OcrResult(mat); + } + + private PaddleOcrResult _OcrResult(Mat mat) { lock (locker) { diff --git a/Fischless.GameCapture/Graphics/GraphicsCapture.cs b/Fischless.GameCapture/Graphics/GraphicsCapture.cs index 395b746a..10c5f8c1 100644 --- a/Fischless.GameCapture/Graphics/GraphicsCapture.cs +++ b/Fischless.GameCapture/Graphics/GraphicsCapture.cs @@ -312,18 +312,18 @@ public class GraphicsCapture : IGameCapture IsCapturing = false; // 释放最新帧 - // _frameAccessLock.EnterWriteLock(); - // try - // { - // _latestFrame?.Dispose(); - // _latestFrame = null; - // } - // finally - // { - // _frameAccessLock.ExitWriteLock(); - // } - // - // _frameAccessLock.Dispose(); + _frameAccessLock.EnterWriteLock(); + try + { + _latestFrame?.Dispose(); + _latestFrame = null; + } + finally + { + _frameAccessLock.ExitWriteLock(); + } + + _frameAccessLock.Dispose(); } private void CaptureItemOnClosed(GraphicsCaptureItem sender, object args) diff --git a/Fischless.GameCapture/Graphics/Helpers/Direct3D11Helper.cs b/Fischless.GameCapture/Graphics/Helpers/Direct3D11Helper.cs index 6a831f30..ca1f0449 100644 --- a/Fischless.GameCapture/Graphics/Helpers/Direct3D11Helper.cs +++ b/Fischless.GameCapture/Graphics/Helpers/Direct3D11Helper.cs @@ -46,9 +46,11 @@ public static class Direct3D11Helper return CreateDevice(false); } + private static SharpDX.Direct3D11.Device? d3dDevice; + public static IDirect3DDevice CreateDevice(bool useWARP) { - var d3dDevice = new SharpDX.Direct3D11.Device( + d3dDevice ??= new SharpDX.Direct3D11.Device( useWARP ? SharpDX.Direct3D.DriverType.Software : SharpDX.Direct3D.DriverType.Hardware, SharpDX.Direct3D11.DeviceCreationFlags.BgraSupport); var device = CreateDirect3DDeviceFromSharpDXDevice(d3dDevice);