WinForm自动化测试工具开发札记(5)使用.NET Framework 2.0 新功能抓屏
2007-10-27 06:49
561 查看
2006年03月29日 12:38:00
花絮
上火了,眼睛疼ing...滴了眼药...看你还敢疼的!
这两天一直在攻克抓屏这一关.手头有几本书,还有网上的一些例子,都是使用Win32 API的BitBlt函数.大同小异.今天在看.NET Framework 2.0的类库时,偶然发现原来抓屏功能已经集成进.NET Framework 2.0的Graphics类了,是个实例方法.两行代码就搞定!下面我给出代码.排在后面的是使用Win32实现的代码,不过已经用处不大了:p
1.使用.NET Framework 2.0 类库新功能:
//==========水之真谛==========//
//
// =http://blog.csdn.net/FantasiaX //
//
//======上善若水,润物无声====//
using System;
using System.Text;
//以下3个using是手动添加的,要想使用System.Drawing,还要添加System.Drawing.dll的引用
using System.Drawing;
using System.Drawing.Imaging;
using System.Threading;
namespace SuperCamera
{
class Program
{
static void Main(string[] args)
{
//给你5秒钟,摆个Pose!
Thread.Sleep(5000);
//说:茄~~~~~子~~~~~~
Bitmap photo = new Bitmap(1024, 768, PixelFormat.Format32bppArgb);
Graphics graph = Graphics.FromImage(photo);
graph.CopyFromScreen(0, 0, 0, 0, new Size(1024, 768));
photo.Save(@"C:/水之真谛.jpg", ImageFormat.Jpeg);
Console.WriteLine(@"OK,去C:/盘下面取照片吧!不过,唔~~~不是你的哦!");
Console.ReadLine();
}
}
}
2.使用Win32 API的:
using System;
using System.Text;
using System.Drawing;
using System.Drawing.Imaging;
using System.Runtime.InteropServices;
using System.Threading;
namespace SimpleCamera
{
class Program
{
[DllImport("gdi32.dll")]
private static extern IntPtr CreateDC(string driver, string device, string win16, IntPtr printDev);
[DllImport("gdi32.dll")]
private static extern bool BitBlt(IntPtr outputDC, int left, int top, int width, int height, IntPtr sourceDC, int x, int y, int opt);
static void Main(string[] args)
{
Thread.Sleep(5000);
//获取与屏幕相关的DC,并基于此DC生成Graph。
IntPtr screenDC = CreateDC("DISPLAY", null, null, IntPtr.Zero);
Graphics screenGraph = Graphics.FromHdc(screenDC);
//以屏幕Ghraph为基础,生成位图
Image outputImage = new Bitmap(1024, 768, screenGraph);
//获取与位图关联的Graph,并基于此获得位图的DC。
Graphics imgGraph = Graphics.FromImage(outputImage);
IntPtr imgDC = imgGraph.GetHdc();
//使用Win32 API "灌图"
BitBlt(imgDC, 0, 0, 1024, 768, screenDC, 0, 0, 0xCC0020);
//保存位图
imgGraph.ReleaseHdc(imgDC);
outputImage.Save(@"C:/水之真谛.jpg", ImageFormat.Jpeg);
}
}
}
此实例再次印证了这样一句话:对类库越了解,就能写出性能越高的程序来。类库的作用就是避免我们自己"从轮子造起"。
法律声明:本文章受到知识产权法保护,任何单位或个人若需要转载此文,必需保证文章的完整性(未经作者许可的任何删节或改动将视为侵权行为)。若您需要转载,请务必注明文章出处为CSDN以保障网站的权益;请务必注明文章作者为刘铁猛,并向bladey@tom.com发送邮件,标明文章位置及用途。转载时请将此法律声明一并转载,谢谢!
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=642793
花絮
上火了,眼睛疼ing...滴了眼药...看你还敢疼的!
这两天一直在攻克抓屏这一关.手头有几本书,还有网上的一些例子,都是使用Win32 API的BitBlt函数.大同小异.今天在看.NET Framework 2.0的类库时,偶然发现原来抓屏功能已经集成进.NET Framework 2.0的Graphics类了,是个实例方法.两行代码就搞定!下面我给出代码.排在后面的是使用Win32实现的代码,不过已经用处不大了:p
1.使用.NET Framework 2.0 类库新功能:
//==========水之真谛==========//
//
// =http://blog.csdn.net/FantasiaX //
//
//======上善若水,润物无声====//
using System;
using System.Text;
//以下3个using是手动添加的,要想使用System.Drawing,还要添加System.Drawing.dll的引用
using System.Drawing;
using System.Drawing.Imaging;
using System.Threading;
namespace SuperCamera
{
class Program
{
static void Main(string[] args)
{
//给你5秒钟,摆个Pose!
Thread.Sleep(5000);
//说:茄~~~~~子~~~~~~
Bitmap photo = new Bitmap(1024, 768, PixelFormat.Format32bppArgb);
Graphics graph = Graphics.FromImage(photo);
graph.CopyFromScreen(0, 0, 0, 0, new Size(1024, 768));
photo.Save(@"C:/水之真谛.jpg", ImageFormat.Jpeg);
Console.WriteLine(@"OK,去C:/盘下面取照片吧!不过,唔~~~不是你的哦!");
Console.ReadLine();
}
}
}
2.使用Win32 API的:
using System;
using System.Text;
using System.Drawing;
using System.Drawing.Imaging;
using System.Runtime.InteropServices;
using System.Threading;
namespace SimpleCamera
{
class Program
{
[DllImport("gdi32.dll")]
private static extern IntPtr CreateDC(string driver, string device, string win16, IntPtr printDev);
[DllImport("gdi32.dll")]
private static extern bool BitBlt(IntPtr outputDC, int left, int top, int width, int height, IntPtr sourceDC, int x, int y, int opt);
static void Main(string[] args)
{
Thread.Sleep(5000);
//获取与屏幕相关的DC,并基于此DC生成Graph。
IntPtr screenDC = CreateDC("DISPLAY", null, null, IntPtr.Zero);
Graphics screenGraph = Graphics.FromHdc(screenDC);
//以屏幕Ghraph为基础,生成位图
Image outputImage = new Bitmap(1024, 768, screenGraph);
//获取与位图关联的Graph,并基于此获得位图的DC。
Graphics imgGraph = Graphics.FromImage(outputImage);
IntPtr imgDC = imgGraph.GetHdc();
//使用Win32 API "灌图"
BitBlt(imgDC, 0, 0, 1024, 768, screenDC, 0, 0, 0xCC0020);
//保存位图
imgGraph.ReleaseHdc(imgDC);
outputImage.Save(@"C:/水之真谛.jpg", ImageFormat.Jpeg);
}
}
}
此实例再次印证了这样一句话:对类库越了解,就能写出性能越高的程序来。类库的作用就是避免我们自己"从轮子造起"。
法律声明:本文章受到知识产权法保护,任何单位或个人若需要转载此文,必需保证文章的完整性(未经作者许可的任何删节或改动将视为侵权行为)。若您需要转载,请务必注明文章出处为CSDN以保障网站的权益;请务必注明文章作者为刘铁猛,并向bladey@tom.com发送邮件,标明文章位置及用途。转载时请将此法律声明一并转载,谢谢!
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=642793
相关文章推荐
- WinForm自动化测试工具开发札记(5)使用.NET Framework 2.0 新功能抓屏
- WinForm自动化测试工具开发札记(5)使用.NET Framework 2.0 新功能抓屏
- 使用.NET Framework 2.0 新功能抓屏
- Mono为使用.NET2.0框架开发的软件脱离.NET Framework独立运行
- RDIFramework.NET开发实例━表约束条件权限的使用-Web
- 使用 ASP.NET 2.0 进行移动 Web 开发
- 【.Net Compact Framework开发】 使用 Visual Studio 对移动项目进行Unit Testing的方法总结
- 使用Visual Studio 2005和.NET Framework 3.0在Vista下开发应用
- SNF开发平台WinForm之八-自动升级程序部署使用说明-SNF快速开发平台3.3-Spring.Net.Framework
- SNF开发平台WinForm之九-代码生成器使用说明-SNF快速开发平台3.3-Spring.Net.Framework
- Asp.net 2.0 自定义控件开发专题[详细探讨页面状态(视图状态和控件状态)机制及其使用场景](示例代码下载)
- Asp.net 2.0 自定义控件开发专题[详细探讨页面状态(视图状态和控件状态)机制及其使用场景](示例代码下载)
- .NET Framework 4.6 and 4.5 > 开发指南 > 使用 WCF 的面向服务的应用程序 > Windows Communication Foundation (WCF)
- 正在使用.NET Framework 2.0 Beta 2的开发者要注意了!
- asp.net 2.0 移动开发入门之使用模拟器
- 在 .NET Compact Framework 2.0 中使用序列化
- 在.net framework 2.0 环境下开发 .net framework 3.5 的程序
- Windows Moible, Wince 使用.NET Compact Framework的进行蓝牙(Bluetooth)开发 之 Windows Embedded Source Tools for Bluetooth
- 使用 .NET Compact Framework 2.0 生成 Wi-Fi 发现应用程序
- 必须使用“控制面板”中的“打开或关闭Windows 功能”安装或配置microsoft.NET framework 2.0 SP2