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);