| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付赛孚耐:软件保护加密专家
身份认证令牌USB KEY   
共有 2249 人关注过本帖
标题:教你使用C# 截取屏幕图像,都来做自己的屏幕录像专家
收藏  订阅  推荐  打印 
dreamsfly
Rank: 2
等级:注册会员
帖子:122
积分:1442
注册:2007-6-29
教你使用C# 截取屏幕图像,都来做自己的屏幕录像专家

//获取屏幕1024*768图像
        [System.Runtime.InteropServices.DllImport("gdi32.dll")]
        public static extern int BitBlt(IntPtr hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, IntPtr hdcSrc, int nXSrc, int nYSrc, UInt32 dwRop);
      //创建桌面句柄
        [System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")]
        public static extern IntPtr CreateDC(string lpszDriver, string lpszDevice, string lpszOutput, int lpInitData);

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

        //转换为本地的图像资源
        [System.Runtime.InteropServices.DllImport("gdi32.dll")]
        public static extern IntPtr CreateCompatibleBitmap(IntPtr hdc, int nWidth, int nHeight);

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

        [System.Runtime.InteropServices.DllImport("gdi32.dll")]
        public static extern int DeleteDC(IntPtr hdc);

        //释放用过的设备句柄
        [DllImport("user32.dll")]
        public static extern bool ReleaseDC(
         IntPtr hwnd, IntPtr hdc
         );

        //释放用过的画笔等资源
        [DllImport("gdi32.dll")]
        public static extern bool DeleteObject(
          IntPtr hdc
         );
        


/// <summary>
        /// 截取屏幕图像
        /// </summary>
        /// <param name="Width">宽</param>
        /// <param name="Height">高</param>

        /// <param name="x">x坐标(全屏时候为0)</param>
        /// <param name="y">y坐标(全屏时候为0)</param>

        /// <returns></returns>
        public Bitmap fullphoto(int Width,int Height,int x,int y)
        {
            Bitmap bitmap;
            //try
            //{
                IntPtr hScreenDc = CreateDC("DISPLAY", null, null, 0); // 创建桌面句柄
                IntPtr hMemDc = CreateCompatibleDC(hScreenDc); // 创建与桌面句柄相关连的内存DC
                IntPtr hBitmap = CreateCompatibleBitmap(hScreenDc, Width, Height);   
                IntPtr hOldBitmap = SelectObject(hMemDc, hBitmap);
                BitBlt(hMemDc, x, y, Width, Height, hScreenDc, x, y, (UInt32)0xcc0020);
                IntPtr map = SelectObject(hMemDc, hOldBitmap);
                bitmap = Bitmap.FromHbitmap(map);  
                ReleaseDC(hBitmap, hScreenDc);
                DeleteDC(hScreenDc);//删除用过的对象
                DeleteDC(hMemDc);//删除用过的对象
                DeleteDC(hOldBitmap);
                DeleteObject(hBitmap);
               
              
            //}
            //catch (Exception wx)
            //{
            //    return null;
                //}
                // number= number +1;
                // bitmap.Save("screen" + number + ".bmp");
            
            return bitmap;
        }


屏幕截图大概就是这样的,

bitmap.Save保存一下,看看是不是屏幕的图像,呵呵.
[url=http://www.521hn.com]www.521hn.com[/url]来支持一下我的小站
转载请注明,来源[url=http://www.521hn.com]www.521hn.com[/url]


搜索更多相关主题的帖子: int  录像  屏幕  图像  专家  
2007-12-5 09:06
gaomenggaici
Rank: 2
等级:注册会员
帖子:67
积分:792
注册:2007-2-1
ok

哪如何把这些图片组合生成动画世界或视频文件
2007-12-6 20:26
dreamsfly
Rank: 2
等级:注册会员
帖子:122
积分:1442
注册:2007-6-29

呵呵,那你要先研究了

www.521hn.com 我的原创下载
2007-12-9 12:39
梦心
Rank: 12Rank: 12Rank: 12
来自:福建平和
等级:版主
威望:6
帖子:1570
积分:15040
注册:2007-5-11

楼主是想每秒截取屏幕30副图片,然后组成一个视频文件???

我清高和我骄傲的倔强,在风中大声的唱:我不听,我不听~~做我自己最特别,呼呼~~啦啦~~~
我的博客园地址: [url]http://mengxin523.cnblogs.com[/url]
2007-12-9 13:11
dreamsfly
Rank: 2
等级:注册会员
帖子:122
积分:1442
注册:2007-6-29

秒截取屏幕图片,可以自己社定,组成一个视频文件,我还没有研究,估计需要GDI的API

www.521hn.com 我的原创下载
2007-12-10 08:56
shiweifu
Rank: 2
等级:注册会员
帖子:170
积分:1948
注册:2006-12-2

感觉这样的话,效率不是 很好吧。。
2007-12-10 12:39
jacklee
Rank: 12Rank: 12Rank: 12
来自:宏杰技术
等级:贵宾
威望:32
帖子:1744
积分:18410
注册:2006-11-3

需要用到DX吧,或VFW。。这样搞成的AVI容量太大,受不了的.要是能录SWF那是理想选择.

佛山宏杰技术!
2007-12-10 12:46
jacklee
Rank: 12Rank: 12Rank: 12
来自:宏杰技术
等级:贵宾
威望:32
帖子:1744
积分:18410
注册:2006-11-3

这样录下来你保存为AVI后,一分钟就有1G多。

佛山宏杰技术!
2007-12-10 12:46
jacklee
Rank: 12Rank: 12Rank: 12
来自:宏杰技术
等级:贵宾
威望:32
帖子:1744
积分:18410
注册:2006-11-3

标准BMP.一张1024*768=2.25M*(1秒=30)
2.25*30*60=?4050!

佛山宏杰技术!
2007-12-10 12:48
guoxhvip
Rank: 12Rank: 12Rank: 12
来自:聖西羅南看臺
等级:版主
威望:40
帖子:3975
积分:39423
注册:2006-10-8

jacklee算得仔细

愛生活 && 愛編程
2007-12-10 14:36
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.059547 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved