用gdi32.dll的如下用C#来捕获屏幕的源程序代码(Capture.cs)[code=C#]using System ; using System.Drawing ; using System.Collections ; using System.ComponentModel ; using System.Windows.Forms ; using System.Data ; using System.Drawing.Imaging ; public class Form1 : Form { private Button button1 ; private System.ComponentModel.Container components = null ;
http://www.cnblogs.com/anchky/archive/2006/10/21/535661.aspx
Bitmap _Bitmap =new Bitmap(100,100); //创建图形
Graphics _Graphics = Graphics.FromImage(_Bitmap); //获取GDI+绘图
_Graphics.DrawString("A", new Font("宋体", 20), Brushes.Yellow, 0, 0); //绘制问题
_Graphics.Dispose(); //释放资源 _Bitmap.Save(@"C:\1.bmp", ImageFormat.Bmp); //保存文件
2/// 改变图像透明度(真透明)
3/// </summary>
4/// <param name="img">所要转变的图像</param>
5/// <param name="alpha">透明度,最大为1,最小为0</param>
6/// <returns>改变后的图像</returns>
7public static Bitmap VitrificationImage(Image img, float alpha)
8{
9 Bitmap _newImg = new Bitmap(img.Width, img.Height);
10
11 using (Graphics _g = Graphics.FromImage(_newImg))
12 {
13 using (ImageAttributes _imageAttrs = new ImageAttributes())
14 {
15 _imageAttrs.SetColorMatrix(new ColorMatrix(CreateAlphaMatrix(alpha)));
16
17 _g.DrawImage(img, new Rectangle(0, 0, img.Width, img.Height),
18 1, 1, img.Width, img.Height, GraphicsUnit.Pixel, _imageAttrs);
19 }
20 }
21
22 return _newImg;
23}
24
25/**///// <summary>
26/// 创建用于改变图像透明度的颜色矩阵
27/// </summary>
28/// <param name="alpha">所要设置的透明度</param>
29/// <returns>返回用于图像转换的颜色矩阵</returns>
30private static float[][] CreateAlphaMatrix(float alpha)
31{
32 if (alpha > 1)
33 alpha = 1;
34
35 if (alpha < 0)
36 alpha = 0;
37
38 float[][] _matrix =
39 {
40 new float[] {1, 0, 0, 0, 0},
41 new float[] {0, 1, 0, 0, 0},
42 new float[] {0, 0, 1, 0, 0},
43 new float[] {0, 0, 0, alpha, 0},
44 new float[] {0, 0, 0, 0, 1}
45 };
46
47 return _matrix;
48}
using System.Drawing ;
using System.Collections ;
using System.ComponentModel ;
using System.Windows.Forms ;
using System.Data ;
using System.Drawing.Imaging ;
public class Form1 : Form
{
private Button button1 ;
private System.ComponentModel.Container components = null ;
public Form1 ( )
{
//初始化窗体中的各个组件
InitializeComponent ( ) ;
}
// 清除程序中使用过的资源
protected override void Dispose ( bool disposing )
{
if ( disposing )
{
if ( components != null )
{
components.Dispose ( ) ;
}
}
base.Dispose ( disposing ) ;
}
private void InitializeComponent ( )
{
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 // 光栅的处理数值
) ;
static void Main ( )
{
Application.Run ( new Form1 ( ) ) ;
}
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文件!" ) ;
}
}
#endregion
难的是怎样持久显示图片
对于没有CreateGraphics()方法控件,需要使用API进行获取.