winform截屏

引自 http://www.cnblogs.com/aland-liu/archive/2011/07/20/Winform.html

已经注册博客好久,一直由于工作原因没有打理。今天在网上看了一个截屏的方法思想,感觉不错。就按照这个思路和网友的代码进行整理编写了一个小工具。第一次发博客不足之处,还请高手们批评指正。

废话就不多说放了,代码如下:

截取全屏代码:

try
            {
                this.Hide();
                Rectangle bounds = Screen.GetBounds(Screen.GetBounds(Point.Empty));
                Bitmap bitmap = new Bitmap(bounds.Width, bounds.Height);
                Graphics g = Graphics.FromImage(bitmap);
                g.CopyFromScreen(Point.Empty, Point.Empty, bounds.Size);

                System.Threading.Thread.Sleep(50);

                SaveFileDialog saveFileDialog = new SaveFileDialog();
                saveFileDialog.Filter = "bmp files (*.bmp)|*.bmp";
                saveFileDialog.Title = "保存文件";
                saveFileDialog.ShowDialog();
                bmpPath = saveFileDialog.FileName;
                if ("" != bmpPath)
                {
                    bitmap.Save(bmpPath, ImageFormat.Bmp);
                }
                bitmap.Dispose();
                this.Show();
            }
            catch (System.Exception ex)
            {
                MessageBox.Show("抓图失败!");
                this.Show();
            }

frmChildScreen 窗体代码如下:

private void frmChildScreen_Load(object sender, EventArgs e)
        {
            this.Cursor = Cursors.Cross;

            this.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint, true);
            this.UpdateStyles();
            originBmp = new Bitmap(this.BackgroundImage);
        }

        private void Catch_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                if (!catchStart)
                {
                    catchStart = true;
                    startPoint = new Point(e.X, e.Y);
                }
            }
        }

        private void Catch_MouseClick(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right)
            {
                this.DialogResult = DialogResult.OK;
                this.Close();
            }
        }

        private void Catch_MouseMove(object sender, MouseEventArgs e)
        {
            if (catchStart)
            {
                Bitmap destBmp = (Bitmap)originBmp.Clone();
                Point newPoint = new Point(startPoint.X, startPoint.Y);
                Graphics g = Graphics.FromImage(destBmp);
                Pen p = new Pen(Color.Blue, 1);
                int width = Math.Abs(e.X - startPoint.X), height = Math.Abs(e.Y - startPoint.Y);
                if (e.X < startPoint.X)
                {
                    newPoint.X = e.X;
                }
                if (e.Y < startPoint.Y)
                {
                    newPoint.Y = e.Y;
                }
                catchRect = new Rectangle(newPoint, new Size(width, height));
                g.DrawRectangle(p, catchRect);
                g.Dispose();
                p.Dispose();
                Graphics g1 = this.CreateGraphics();
                g1 = this.CreateGraphics();
                g1.DrawImage(destBmp, new Point(0, 0));
                g1.Dispose();
                destBmp.Dispose();
            }
        }

        private void Catch_MouseUp(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                if (catchStart)
                {
                    catchStart = false;
                    catchFinish = true;
                }
            }
        }

        private void Catch_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left && catchFinish)
            {
                if (catchRect.Contains(new Point(e.X, e.Y)))
                {
                    Bitmap bitmap = new Bitmap(catchRect.Width, catchRect.Height);
                    Graphics g = Graphics.FromImage(bitmap);
                    g.DrawImage(originBmp, new Rectangle(0, 0, bitmap.Width, bitmap.Height), catchRect, GraphicsUnit.Pixel);

                    SaveFileDialog saveFileDialog = new SaveFileDialog();
                    saveFileDialog.Filter = "bmp files (*.bmp)|*.bmp";
                    saveFileDialog.Title = "保存文件";
                    saveFileDialog.ShowDialog();
                    bmpPath = saveFileDialog.FileName;
                    if ("" != bmpPath)
                    {
                        bitmap.Save(bmpPath, ImageFormat.Bmp);
                    }
                    bitmap.Dispose();
                    this.DialogResult = DialogResult.OK;
                    this.Close();
                }
            }
        }

截取局部屏幕代码如下:

try
            {
                this.Hide();
                Rectangle bounds = Screen.GetBounds(Screen.GetBounds(Point.Empty));

                Thread.Sleep(50);
                frmChildScreen CatchForm = new frmChildScreen();
                Bitmap catchBmp = new Bitmap(bounds.Width, bounds.Height);
                Graphics g = Graphics.FromImage(catchBmp);
                g.CopyFromScreen(new Point(0, 0), new Point(0, 0), new Size(Screen.AllScreens[0].Bounds.Width, Screen.AllScreens[0].Bounds.Height));
                CatchForm.BackgroundImage = catchBmp;
                if (CatchForm.ShowDialog() == DialogResult.OK)
                {
                    this.Show();
                }

            }
            catch (System.Exception e)
            {
                MessageBox.Show("抓图失败!");
                this.Show();
            }
时间: 2024-10-13 11:42:16

winform截屏的相关文章

C# winform 截屏代码

try { Image image = new Bitmap(width, height); Graphics g = Graphics.FromImage(image); g.CopyFromScreen(x, y, 0, 0, new System.Drawing.Size(width, height)); string hour = DateTime.Now.Minute.ToString(); string second = DateTime.Now.Second.ToString();

C#截屏

本实例代码实现了WinForm截屏保存为图片,亲测可行. 界面截图: 下载:http://hovertree.com/h/bjaf/scjyuanma.htm 以下代码可以实际运行,在项目HoverTreeCSJ中运行成功. /* 何问起 http://hovertree.com/hovertreescj/ */ using System; using System.Drawing; using System.Drawing.Imaging; using System.IO; using Sys

【WPF】WPF截屏

引言 .NET的截图控件在网上流传得不多啊,难得发现一个精品截图控件( 传送门),但是无奈是winform的,无鄙视winform的意思,纯偏爱WPF罢了.后来又找到一个周银辉做的WPF截图(继续传送门),发现截屏是实现了,但是功能略少了点.So,打算自己用WPF去实现一个,无奈略渣,还是简单分享一下吧. 一个Window和一个Canvas Window是截图的主界面,但是设置好WindowStyle和WindowState就基本没它什么事了,Window里面放个Canvas,Canvas主要承

C#使用phantomjs 进行网页整页截屏

hantomjs 是一个基于js的webkit内核无头浏览器 也就是没有显示界面的浏览器,这样访问网页就省去了浏览器的界面绘制所消耗的系统资源,比较适合用于网络测试等应用 .我只是调用了其中的一个截取网页的小功能,可以完美的解析网页的js和css 而且兼容html5,不过最新的1.5版本不支持flash,所以我采用了1.4的版本,能够得到完整的网页体验. 先看看执行的效率(4M电信,22:30点测试): phantomjs的目录结构 dll挺多的 都是必须的 codecs里面包含编码信息 qcn

Android 7.1.1 系统截屏

frameworks/base/packages/SystemUI/src/com/android/systemui/screenshot/TakeScreenshotService.java TakeScreenshotService.java package com.android.systemui.screenshot; import android.app.Service; import android.content.Intent; import android.os.Handler;

超好用的滚动屏幕截屏工具FastStone Capture

对于超级喜欢整理的技术控,一看到比较好技术文章就想收集下来,单纯的记录网页,又怕作者删除,我只能选择截图,可是有许多文章特别长,直到使用FastStone Capture截图工具,终于可以快速收集这些技术文章了. 1.截图工具是这样的 2.比较好用的滚动截屏使用方法: 图中第六个图标. 1)点击后,可以拖动窗口进行大范围的截图,比如可以将浏览器的网页做为截图对象,截取时,点击选取滚动条箭头就可以完成截图,ESC中断截图滚动! 2)在选定滚动截图图标后还可以按ctrl键进行滚动区域的选择. 3.图

Android自己定义截屏功能,相似QQ截屏

由于公司业务需求 须要对一个屏幕进行截屏.但自带的截屏功能是远远不够项目的功能需求 ,我们是做一个画板软件 .须要的像QQ那样截屏之后 ,能够看到我们自己定义的工具.有画笔,button等等 .android自带的功能非常easy,仅仅须要Intent隐式调用就全然足够了.但他是系统的应用 ,界面固定.无法定制改动.实现方法跟办法有非常多种,以下记录下我实现的方法 .我是这样一个思路 ,重写一个View组件 ,在OnDraw里面仅仅负责不绘图形(包含半透明的四个矩形,亮框矩形,亮框上的四个小圆点

Snipaste强大离线/在线截屏软件的下载、安装和使用

步骤一: https://zh.snipaste.com/  ,去此官网下载. 步骤二:由于此是个绿色软件,直接解压即可. 步骤三:使用,见官网.ttps://zh.snipaste.com  按F1开始截屏 感谢下面哥的精彩微信文章 http://mp.weixin.qq.com/s?__biz=MzIwNzYwODYwMw==&mid=2247483903&idx=1&sn=02121fe920320bbe7b2fae012a18e70a&chksm=970e8f8ba

iOS截屏保存至相册

#pragma mark 截屏并保存至相册 -(void)screenShotsComplete:(void(^)(UIImage * img)) complete { CGSize imageSize = [[UIScreen mainScreen] bounds].size; UIGraphicsBeginImageContextWithOptions(imageSize, NO, 0); CGContextRef context = UIGraphicsGetCurrentContext(