justinstenning / Direct3DHook

DirectX Capture and Overlays by using Direct3D API hooks
http://spazzarama.com/2011/03/14/c-screen-capture-and-overlays-for-direct3d-9-10-and-11-using-api-hooks
MIT License
580 stars 178 forks source link

Strange exception #68

Closed SagSaj closed 5 years ago

SagSaj commented 5 years ago

Hi, when i try do smth like

   string dir = System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
            string filename = dir + @"\1111.png";
            var imageElement = new Capture.Hook.Common.ImageElement(filename);
            _captureProcess.CaptureInterface.DrawOverlayInGame(new Capture.Hook.Common.Overlay
            {
                Elements = new List<Capture.Hook.Common.IOverlayElement>
                {
                    imageElement,
                },
                Hidden = !cbDrawOverlay.Checked
            });

Program return that debag:

Debug: DXHookD3D11: PresentHook: Exeception: System.InvalidOperationException: System.InvalidOperationException: The bitmap area is already locked.

Server stack trace: в System.Drawing.Bitmap.LockBits(Rectangle rect, ImageLockMode flags, PixelFormat format, BitmapData bitmapData) в System.Drawing.Bitmap.LockBits(Rectangle rect, ImageLockMode flags, PixelFormat format) в System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Object[]& outArgs) в System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMessage msg)

Exception rethrown at [0]: в System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) в System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) в System.Drawing.Bitmap.LockBits(Rectangle rect, ImageLockMode flags, PixelFormat format) в Capture.Hook.DX11.DXImage.Initialise(Bitmap bitmap) в C:\Users\Stas\Downloads\Direct3DHook-master\Direct3DHook-master\Capture\Hook\DX11\DXImage.cs:string 62 в Capture.Hook.DX11.DXOverlayEngine.GetImageForImageElement(ImageElement element) в C:\Users\Stas\Downloads\Direct3DHook-master\Direct3DHook-master\Capture\Hook\DX11\DXOverlayEngine.cs:string 199 в Capture.Hook.DX11.DXOverlayEngine.InitialiseElementResources() в C:\Users\Stas\Downloads\Direct3DHook-master\Direct3DHook-master\Capture\Hook\DX11\DXOverlayEngine.cs:string 111 в Capture.Hook.DX11.DXOverlayEngine.Initialise(Device device, Texture2D renderTarget) в C:\Users\Stas\Downloads\Direct3DHook-master\Direct3DHook-master\Capture\Hook\DX11\DXOverlayEngine.cs:string 85 в Capture.Hook.DX11.DXOverlayEngine.Initialise(SwapChain swapChain) в C:\Users\Stas\Downloads\Direct3DHook-master\Direct3DHook-master\Capture\Hook\DX11\DXOverlayEngine.cs:string 47 в Capture.Hook.DXHookD3D11.PresentHook(IntPtr swapChainPtr, Int32 syncInterval, PresentFlags flags) в C:\Users\Stas\Downloads\Direct3DHook-master\Direct3DHook-master\Capture\Hook\DXHookD3D11.cs:string 559

oSkrobuk commented 5 years ago
        ImageConverter converter = new ImageConverter();
        byte[] img = (byte[])converter.ConvertTo(Image.FromFile(@"D:\1.png"), typeof(byte[]));
        _captureProcess.CaptureInterface.DrawOverlayInGame(new Capture.Hook.Common.Overlay
        {
            Elements = {
                new Capture.Hook.Common.ImageElement()
                {
                    Location = new System.Drawing.Point(20, 20),
                    Image = img
                }
            },
            Hidden = false
        });