C# 截屏类

using System.Runtime.InteropServices;
using System.Drawing;

 1     public class BitMapCaptureScreen
 2     {
 3         [DllImport("GDI32.dll")]
 4         public static extern bool BitBlt(int hdcDest,int nXDest,int nYDest,int nWidth,int nHeight,int hdcSrc,int nXSrc,int nYSrc,int dwRop);
 5         [DllImport("GDI32.dll")]
 6         public static extern int CreateCompatibleBitmap(int hdc, int nWidth, int nHeight);
 7         [DllImport("GDI32.dll")]
 8         public static extern int CreateCompatibleDC(int hdc);
 9         [DllImport("GDI32.dll")]
10         public static extern bool DeleteDC(int hdc);
11         [DllImport("GDI32.dll")]
12         public static extern bool DeleteObject(int hObject);
13         [DllImport("GDI32.dll")]
14         public static extern int GetDeviceCaps(int hdc, int nIndex);
15         [DllImport("GDI32.dll")]
16         public static extern int SelectObject(int hdc, int hgdiobj);
17         [DllImport("User32.dll")]
18         public static extern int GetDesktopWindow();
19         [DllImport("User32.dll")]
20         public static extern int GetWindowDC(int hWnd);
21         [DllImport("User32.dll")]
22         public static extern int ReleaseDC(int hWnd, int hDC);
23
24         // Captures the current on-screen representation using Windows API calls
25         public Bitmap CaptureScreen()
26         {
27             // Provides a pointer to the visual representation of the desktop window
28             int source = GetWindowDC(GetDesktopWindow());
29             // Secures the image using CreateCompatibleBitmap
30             int bitmap = CreateCompatibleBitmap(source, GetDeviceCaps(source,8), GetDeviceCaps(source,10));
31
32             int destination = CreateCompatibleDC(source);
33
34             SelectObject(destination, bitmap);
35             BitBlt(destination,0,0, GetDeviceCaps(source,8), GetDeviceCaps(source,10), source,0,0,0x00CC0020);
36             Bitmap image = GetImage(bitmap);
37             // Save the image as a file.
38             image.Save("c:\\capturescreen.jpg", System.Drawing.Imaging.ImageFormat.Gif);
39             Cleanup(bitmap, source, destination);
40             return image;
41         }
42
43         private void Cleanup(int bitmap,int source,int destination)
44         {
45             ReleaseDC(GetDesktopWindow(), source);
46             DeleteDC(destination);
47             DeleteObject(bitmap);
48         }
49
50         private Bitmap GetImage(int hBitmap)
51         {
52             Bitmap image = new Bitmap(Image.FromHbitmap(new IntPtr(hBitmap)), Image.FromHbitmap(new IntPtr(hBitmap)).Width,
53             Image.FromHbitmap(new IntPtr(hBitmap)).Height);
54             return image;
55         }
56
57     }

C# 截屏类

时间: 2024-08-28 08:18:36

C# 截屏类的相关文章

Unity图片处理类,包括压缩、截屏和滤镜

先上代码: 1 using System.Threading; 2 using UnityEngine; 3 using System.IO; 4 using System.Collections; 5 6 public class TextureUtility 7 { 8 public class ThreadData 9 { 10 public int start; 11 public int end; 12 public ThreadData (int s, int e) { 13 sta

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

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

Java邮件发送与屏幕截屏

前几天七夕情人节孤独寂寞的程序猿闲来没事,花了一两个小时写了个小Demo主要实现Java的Mail发送功能和桌面截屏功能. 首先让我们先看看Java sendMail邮件发送和桌面屏幕截屏功能是怎么实现的基础知识. 一.Java  SendMail邮件发送 首先让我们来看看邮件发送的原理图: JavaMail 是一套sun 提供开发邮件收发程序API,JavaMail编写程序就是邮件客户端程序(和outlook.foxmail功能类似) * JavaMail开发需要类库 javamail API

Android Multimedia框架总结(二十五)MediaProjection实现手机截屏(无须root)

转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/53966818 前言:一年半多以前,我们曾有个项目,要做一个截屏功能,当时负责调研的同事,答应了产品上这个功能,但开发一周后,发现,无法实现截取手机屏幕图像,须要root权限,才能做.因为最近研究MediaProjection,意外的发现,竟然无须root,可以轻松实现次功能.曾经被做不到的,如今做到了,很难相信此时的心情.看下今天

JAVA实现的截屏程序

http://hadeslee.iteye.com/blog/125386 http://www.jb51.net/article/75114.htm JAVA截屏程序(第三版) JavaEXTSwingCC++ 呵呵,昨天也看到朋友的留言,又增加了一些功能, 1,增加了一个把截到的图片复制到系统的剪帖板,这样一来就可以直接粘帖到word,photoshop,画图等程序里面了 2,增加了每截一张图片都会新开一个tab来放它,并且tab里面各自有各自的操作方法. 点击下载源文件和可执行JAR文件

Google最新截屏案例详解

Google从Android 5.0 开始,给出了截屏案例ScreenCapture,在同版本的examples的Media类别中可以找到.给需要开发手机或平板截屏应用的小伙伴提供了非常有意义的参考资料,由于以前版本的API是隐藏的,要想开发一个截屏应用需要费一番心思且有局限性.当然了,这里说的截屏不是应用程序本身,而是包括状态栏在内的整个屏幕,不管当前运行的是什么程序,效果同按下手机自带截屏快捷键一样. 整个案例的源码就不在这里显摆了,相信感兴趣的朋友一定能找得到,其实整个工程很简单,而且在A

Android以当前Activity为基准进行截屏

概述: 首先要知道在Android中截取图片大的方面可以分成两个方向,一个是走底层一点,一个是走上层.因为楼主底层代码比较弱,目前也只是停留在a+b的层面.所以,这篇博客只是在应用层上对屏幕进行一个截取.注意,上面讨论的两个方法与游戏中截图是两个概念,游戏中对屏幕的截取可以理解成一种假象.什么样的一种假象呢?没有截屏!因为玩游戏的时候,一般是全屏,这个时候只要保存内存中已经保存了的图像即可. 对于应用层面的截图,它是基于Activity的.这里只是说是基于Activity,不是说一定是要由Act

项目总结之截屏细节考虑

DionysosLai([email protected]) 2014/12/22 2014项目总算告一段落,这个产品顺顺利利从开始到最后的上市,圆满成功.借着项目总结,回顾自己做的几个游戏,将一些细节问题归纳.第一篇,就以目前正在做的的新游戏<圣诞节>开篇,讲讲游戏截屏问题. 对于截屏,本身技术,并不是很复杂,一般有两种方法,一种是使用Opengl像素取点方式:另一种是使用RenderTexture纹理方法,详细内容,可以参考,之前写的一篇文章:http://blog.csdn.net/di

【WPF】WPF截屏

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