C#来捕获屏幕(2)--源程序代码

来源:互联网 发布:同步带轮选型软件 编辑:程序博客网 时间:2024/05/22 03:27
C#来捕获屏幕(2)--源程序代码
2008-01-03 15:29

三. 用C#来捕获屏幕的源程序代码(Capture.cs):

了解上面的这些步骤的实现方法,就可以得到用C#捕获屏幕的源程序,如下:

using System;

using System.Drawing;

using System.Collections;

using System.ComponentModel;

using System.Windows.Forms;

using System.Data;

using System.Drawing.Imaging;

namespace WindowsApplication3

{

    public partial class Form1 : Form

    {

        private Button button1;

        public Form1()

        {

            InitializeComponent();

        }

        private void Form1_Load(object sender, EventArgs e)

        {

            button1 = new Button();

            SuspendLayout();

            button1.Location = new System.Drawing.Point(64, 40);

            button1.Name = "button1";

            button1.Size = new System.Drawing.Size(80, 32);

            button1.TabIndex = 0;

            button1.Text = "捕获";

            button1.Click += new System.EventHandler(button1_Click);

            AutoScaleBaseSize = new System.Drawing.Size(6, 14);

            ClientSize = new System.Drawing.Size(216, 125);

            Controls.Add(button1);

            MaximizeBox = false;

            MinimizeBox = false;

            Name = "Form1";

            Text = "C#捕获当前屏幕!";

            ResumeLayout(false);

        }

        //声明一个API函数

        [System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")]

        private static extern bool BitBlt(

        IntPtr hdcDest, // 目标 DC的句柄

        int nXDest,

        int nYDest,

        int nWidth,

        int nHeight,

        IntPtr hdcSrc, // 源DC的句柄

        int nXSrc,

        int nYSrc,

        System.Int32 dwRop // 光栅的处理数值

        );

        private void button1_Click(object sender, System.EventArgs e)

        {

            //获得当前屏幕的大小

            Rectangle rect = new Rectangle();

            rect = Screen.GetWorkingArea(this);

            //创建一个以当前屏幕为模板的图象

            Graphics g1 = this.CreateGraphics();

            //创建以屏幕大小为标准的位图

            Image MyImage = new Bitmap(rect.Width, rect.Height, g1);

            Graphics g2 = Graphics.FromImage(MyImage);

            //得到屏幕的DC

            IntPtr dc1 = g1.GetHdc();

            //得到Bitmap的DC

            IntPtr dc2 = g2.GetHdc();

            //调用此API函数,实现屏幕捕获

            BitBlt(dc2, 0, 0, rect.Width, rect.Height, dc1, 0, 0, 13369376);

            //释放掉屏幕的DC

            g1.ReleaseHdc(dc1);

            //释放掉Bitmap的DC

            g2.ReleaseHdc(dc2);

            //以JPG文件格式来保存

            MyImage.Save(@"c:/Capture.jpg", ImageFormat.Jpeg);

            MessageBox.Show("当前屏幕已经保存为C盘的capture.jpg文件!");

        }

    }

}

Graphics.FromImage 方法

从指定的 Image 创建新的 Graphics

命名空间:System.Drawing程序集:System.Drawing(在 system.drawing.dll 中)

原创粉丝点击