public D2D1BitmapRenderTarget CreateCompatibleRenderTarget(D2D1SizeF desiredSize, D2D1SizeU desiredPixelSize, D2D1PixelFormat desiredFormat, D2D1CompatibleRenderTargetOptions options)
        {
            ID2D1BitmapRenderTarget bitmapRenderTarget;

            GCHandle desiredSizeHandle = GCHandle.Alloc(desiredSize, GCHandleType.Pinned);
            GCHandle desiredPixelSizeHandle = GCHandle.Alloc(desiredPixelSize, GCHandleType.Pinned);
            GCHandle desiredFormatHandle = GCHandle.Alloc(desiredFormat, GCHandleType.Pinned);

            try
            {
                this.GetHandle<ID2D1RenderTarget>().CreateCompatibleRenderTarget(
                    desiredSizeHandle.AddrOfPinnedObject(),
                    desiredPixelSizeHandle.AddrOfPinnedObject(),
                    desiredFormatHandle.AddrOfPinnedObject(),
                    options,
                    out bitmapRenderTarget);
            }
            finally
            {
                desiredSizeHandle.Free();
                desiredPixelSizeHandle.Free();
                desiredFormatHandle.Free();
            }

            return new D2D1BitmapRenderTarget(bitmapRenderTarget);
        }
        public D2D1BitmapRenderTarget CreateCompatibleRenderTarget(D2D1CompatibleRenderTargetOptions options)
        {
            ID2D1BitmapRenderTarget bitmapRenderTarget;

            this.GetHandle<ID2D1RenderTarget>().CreateCompatibleRenderTarget(
                IntPtr.Zero,
                IntPtr.Zero,
                IntPtr.Zero,
                options,
                out bitmapRenderTarget);

            return new D2D1BitmapRenderTarget(bitmapRenderTarget);
        }