无法使用C#截取屏幕截图

时间:2016-10-17 09:34:34

标签: c#

我正在努力修改这个C#应用程序。 代码源自: http://www.codeproject.com/Articles/485883/Create-your-own-Snipping-Tool

当我运行代码时它执行正常,你会看到标记,它可以让你标记你想截取屏幕截面的扇区,但是我无法标记屏幕的任何扇区。

using System;  
using System.Collections.Generic;  
using System.ComponentModel;  
using System.Data;  
using System.Drawing;  
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;

namespace copy
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //Hide the Form
            this.Hide();
            //Create the Bitmap
            Bitmap printscreen = new Bitmap(Screen.PrimaryScreen.Bounds.Width,
                                     Screen.PrimaryScreen.Bounds.Height);
            //Create the Graphic Variable with screen Dimensions
            Graphics graphics = Graphics.FromImage(printscreen as Image);
            //Copy Image from the screen
            graphics.CopyFromScreen(0, 0, 0, 0, printscreen.Size);
            //Create a temporal memory stream for the image
            using (MemoryStream s = new MemoryStream())
            {
                //save graphic variable into memory
                printscreen.Save(s, ImageFormat.Bmp);
                pictureBox1.Size = new System.Drawing.Size(this.Width, this.Height);
                //set the picture box with temporary stream
                pictureBox1.Image = Image.FromStream(s);
            }
            //Show Form
            this.Show();
            //Cross Cursor
            Cursor = Cursors.Cross;

        }
            //These variables control the mouse position
int selectX;
int selectY;
int selectWidth;
int selectHeight; 
public Pen selectPen;        

//This variable control when you start the right click
bool start = false;



        private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
    //validate if there is an image
    if (pictureBox1.Image == null)
        return;            
    //validate if right-click was trigger
    if(start)
    {
        //refresh picture box
        pictureBox1.Refresh();
        //set corner square to mouse coordinates
        selectWidth = e.X - selectX;
        selectHeight = e.Y - selectY;
        //draw dotted rectangle
        pictureBox1.CreateGraphics().DrawRectangle(selectPen, 
                  selectX, selectY, selectWidth, selectHeight);
    }
}


    private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
    //validate when user right-click
    if (!start)
    {
        if (e.Button == System.Windows.Forms.MouseButtons.Left)
        {
            //starts coordinates for rectangle
            selectX = e.X;
            selectY = e.Y;
            selectPen = new Pen(Color.Red, 1);
            selectPen.DashStyle = DashStyle.DashDotDot;
        }
        //refresh picture box
        pictureBox1.Refresh();
        //start control variable for draw rectangle
        start = true;
    }
    else
    {
        //validate if there is image
        if (pictureBox1.Image == null)
            return;
        //same functionality when mouse is over
        if (e.Button == System.Windows.Forms.MouseButtons.Left)
        {
            pictureBox1.Refresh();
            selectWidth = e.X - selectX;
            selectHeight = e.Y - selectY;
            pictureBox1.CreateGraphics().DrawRectangle(selectPen, selectX, 
                     selectY, selectWidth, selectHeight);

        }
        start = false;
        //function save image to clipboard
        SaveToClipboard();            
    }
}

private void SaveToClipboard()
{
    //validate if something selected
    if (selectWidth > 0)
    {

        Rectangle rect = new Rectangle(selectX, selectY, selectWidth, selectHeight);
        //create bitmap with original dimensions
        Bitmap OriginalImage = new Bitmap(pictureBox1.Image, pictureBox1.Width, pictureBox1.Height);
        //create bitmap with selected dimensions
        Bitmap _img = new Bitmap(selectWidth, selectHeight);
        //create graphic variable
        Graphics g = Graphics.FromImage(_img);
        //set graphic attributes
        g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
        g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
        g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
        g.DrawImage(OriginalImage, 0, 0, rect, GraphicsUnit.Pixel);                
        //insert image stream into clipboard
        Clipboard.SetImage(_img);
    } 
    //End application
    Application.Exit();
}

    }
}

1 个答案:

答案 0 :(得分:1)

由于comments on the linked page已经建议您必须启用您创建的事件处理程序:

public Form1()
{
    InitializeComponent();
    pictureBox1.MouseDown += new MouseEventHandler(pictureBox1_MouseDown);
    pictureBox1.MouseMove += new MouseEventHandler(pictureBox1_MouseMove);
}