屏幕抓图一直使用一款只有 16K 大小的工具(Capture),非常很方便,但在Windows2008下不兼容,无法抓图,因此自己写一个,运行环境为 .NET 2.0,使用方式完全与上述的Catpure相同,并且只有 8K 大小,截图质量更好。
    使用截图如下:
软件发布:网页设计师必备 之 屏幕抓图工具(支持Windows 2008)

代码如下:
C#:
using System;
using System.Drawing;
using System.Windows.Forms;

namespace Xianfen.Net.Capture
{
    
/// <summary>
    
///
    
/// 屏幕截图工具
    
///
    
/// http://www.xianfen.net
    
///
    
/// Ver:1.0
    
///
    
/// 2008-07-01
    
///
    
/// </summary>
    public class Capture : Form
    {
        PictureBox pictureBox;
        
bool isDown = false;
        Point downPos;
        Point upPos;
        Rectangle rect;
        Bitmap bmp;
        Graphics g;

        
public Capture()
        {
            pictureBox
= new PictureBox();
            pictureBox.Dock
= DockStyle.Fill;
            pictureBox.BorderStyle
= BorderStyle.None;
            pictureBox.MouseDown
+= new MouseEventHandler(pictureBox_MouseDown);
            pictureBox.MouseMove
+= new MouseEventHandler(pictureBox_MouseMove);
            pictureBox.MouseUp
+= new MouseEventHandler(pictureBox_MouseUp);

            
this.Cursor = new Cursor(Environment.SystemDirectory + @"\..\Cursors\pen_rm.cur");
            
this.Controls.Add(pictureBox);
            
this.ShowInTaskbar = false;
            
this.DoubleBuffered = true;
            
this.Size = new Size(0, 0);
            
this.Load += new EventHandler(Capture_Load);
        }

        
void pictureBox_MouseDown(object sender, MouseEventArgs e)
        {
            isDown
= true;
            downPos
= e.Location;
        }

        
void pictureBox_MouseMove(object sender, MouseEventArgs e)
        {
            
if (isDown)
            {
                pictureBox.Refresh();
                ControlPaint.DrawReversibleFrame(
                    
new Rectangle(downPos.X, downPos.Y, e.X - downPos.X, e.Y - downPos.Y),
                    Color.Black, FrameStyle.Dashed);
            }
        }

        
void pictureBox_MouseUp(object sender, MouseEventArgs e)
        {
            isDown
= false;
            upPos
= e.Location;

            
if (upPos.X < downPos.X)
            {
                upPos.X
= upPos.X + downPos.X;
                downPos.X
= upPos.X - downPos.X;
                upPos.X
= upPos.X - downPos.X;
            }

            
if (upPos.Y < downPos.Y)
            {
                upPos.Y
= upPos.Y + downPos.Y;
                downPos.Y
= upPos.Y - downPos.Y;
                upPos.Y
= upPos.Y - downPos.Y;
            }

            
if (upPos.X - downPos.X > 0 && upPos.Y - downPos.Y > 0)
            {
                
try
                {
                    Bitmap targetBmp
= new Bitmap(upPos.X - downPos.X, upPos.Y - downPos.Y);
                    Graphics targetG
= Graphics.FromImage(targetBmp);

                    targetG.DrawImage(bmp,
new Rectangle(0, 0, upPos.X - downPos.X, upPos.Y - downPos.Y),
                        downPos.X, downPos.Y, upPos.X
- downPos.X, upPos.Y - downPos.Y, GraphicsUnit.Pixel);

                    targetG.Dispose();
                    bmp.Dispose();
                    g.Dispose();

                    Clipboard.SetImage(targetBmp);
                }
                
catch
                {
                }
            }

            Close();
        }

        
void Capture_Load(object sender, EventArgs e)
        {
            rect
= Screen.PrimaryScreen.Bounds;
            bmp
= new Bitmap(rect.Width, rect.Height);

            g
= Graphics.FromImage(bmp);
            g.CopyFromScreen(
0, 0, 0, 0, rect.Size);

            pictureBox.Image
= bmp;

            
this.TopMost = true;
            
this.FormBorderStyle = FormBorderStyle.None;
            
this.WindowState = FormWindowState.Maximized;
        }
    }
}

可执行文件下载:点击下载

相关文章:

  • 2021-12-20
  • 2022-12-23
  • 2021-12-29
  • 2021-11-04
  • 2021-12-08
  • 2021-09-10
  • 2021-10-02
  • 2021-07-02
猜你喜欢
  • 2022-01-02
  • 2021-11-02
  • 2021-11-07
  • 2021-11-07
  • 2021-12-10
相关资源
相似解决方案