C# 根据控件 或者操作句柄进行截图 备忘

#region 使用api32 根据窗体句柄进行截图

        /// <summary>
        /// 此方法仅仅适用于设计器画在pan上的
        /// </summary>
        /// <param name="cot"></param>
        /// <returns></returns>
        public Bitmap CutControlBitmap(Control cot)
        {
            Bitmap bmp = new Bitmap(cot.Width, cot.Height);
            cot.DrawToBitmap(bmp, cot.ClientRectangle);
            return bmp;
        }



        public Bitmap CutControlBitmap(IntPtr winCotPtr)
        {
            //1先获取控件的大小
            IntPtr hscrdc = GetWindowDC(winCotPtr);
            RECT rECT = new RECT();
            GetWindowRect(winCotPtr, ref rECT);
            IntPtr mapPtr = CreateCompatibleBitmap(hscrdc, rECT.Right - rECT.Left, rECT.Bottom - rECT.Top);
            IntPtr hmemdc = CreateCompatibleDC(hscrdc);
            SelectObject(hmemdc, mapPtr);
            PrintWindow(winCotPtr, hmemdc, 0);
            Bitmap bmp=Bitmap.FromHbitmap(mapPtr);
            DeleteObject(mapPtr);
            DeleteDC(hscrdc);
            DeleteDC(hmemdc);
            return bmp;
        }

        [DllImport("user32.dll")]
        public static extern IntPtr GetWindowDC(IntPtr hwnd);

        [DllImport("user32.dll")]
        public static extern IntPtr GetWindowRect(IntPtr hWnd, ref RECT rect);

        [DllImport("gdi32.dll")]
        public static extern IntPtr CreateCompatibleBitmap(IntPtr hdc, int nWidth, int nHeight);

        [DllImport("gdi32.dll")]
        public static extern IntPtr CreateCompatibleDC(IntPtr hdc);

        [DllImport("gdi32.dll")]
        public static extern IntPtr SelectObject(IntPtr hdc, IntPtr hgdiobj);

        [DllImport("user32.dll")]
        public static extern bool PrintWindow(IntPtr hwnd, IntPtr hdcBlt, UInt32 nFlags);

        [DllImport("gdi32.dll")]
        public static extern IntPtr DeleteObject(IntPtr hgdiobj);

        [DllImport("gdi32.dll")]
        public static extern int DeleteDC(IntPtr hdc);
        public struct RECT
        {
            public int Left;
            public int Top;
            public int Right;
            public int Bottom;
        }

        #endregion
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

望天hous

你的鼓励是我最大动力~谢谢啦!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值