下面是详细的C#实现截图工具小项目攻略。
一、项目背景
截图工具是一款在电脑操作中十分常用的小工具,通过对电脑屏幕进行截图来方便用户进行操作、记录等。而使用C#进行开发,同样可以实现一个简单易用的截图工具,因此本篇攻略主要讲解如何使用C#实现截图工具。
二、开发准备
- 开发工具:Visual Studio或Visual Studio Code(推荐使用Visual Studio,因为Visual Studio内置了更多的开发辅助工具)
- 运行环境:.NET Framework(目前新版已经升级至.NET Core)
三、项目实现
1.准备工作
我们需要在窗体中添加一个PictureBox控件,用来显示截图内容。可以通过拖拽的方式将PictureBox控件添加进窗体。
2.截屏实现
我们可以使用C#中的Screen类来获取屏幕的信息,以及使用Graphics类来进行绘制。以下是C#实现截图的代码:
public static Image CaptureScreen()
{
Rectangle screenSize = Screen.PrimaryScreen.Bounds;
Bitmap result = new Bitmap(screenSize.Width, screenSize.Height);
using (Graphics g = Graphics.FromImage(result))
{
g.CopyFromScreen(screenSize.Left, screenSize.Top, 0, 0, screenSize.Size);
}
return result;
}
首先通过Screen.PrimaryScreen.Bounds获取屏幕信息,并新建一个大小与屏幕信息相同的Bitmap对象result。然后使用Graphics.FromImage(result)获取Bitmap对象所对应的Graphics对象,最后通过g.CopyFromScreen获取屏幕截图。
3.绘制选区
在截屏时,我们可能只需要其中的一部分内容。因此,我们需要先绘制一个选区框,来指定我们所需要的内容。下面的代码将绘制一个红色边框的方框:
public static void DrawRectangle(Graphics g, int x1, int y1, int x2, int y2)
{
int xmin = Math.Min(x1, x2);
int ymin = Math.Min(y1, y2);
int width = Math.Abs(x1 - x2);
int height = Math.Abs(y1 - y2);
var pen = new Pen(Color.Red);
g.DrawRectangle(pen, xmin, ymin, width, height);
}
4.实现
通过鼠标的移动与点击事件来实现截图并显示选中区域的内容,以下是完整代码:
public partial class Form1 : Form
{
private Point startPoint;
private Rectangle rect;
private bool isMouseDown = false;
private Image screenShot;
public Form1()
{
InitializeComponent();
this.DoubleBuffered = true;
this.FormBorderStyle = FormBorderStyle.None;
this.WindowState = FormWindowState.Maximized;
}
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
startPoint = e.Location;
isMouseDown = true;
}
private void Form1_MouseUp(object sender, MouseEventArgs e)
{
isMouseDown = false;
this.Hide();
Thread.Sleep(200);
using (var bmp = new Bitmap(rect.Width, rect.Height))
using (var g = Graphics.FromImage(bmp))
{
g.DrawImage(screenShot, new Rectangle(0, 0, bmp.Width, bmp.Height), rect, GraphicsUnit.Pixel);
g.Save();
pictureBox1.Image = bmp;
}
this.Close();
}
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
if (isMouseDown)
{
var current = e.Location;
rect = new Rectangle
{
X = Math.Min(startPoint.X, current.X),
Y = Math.Min(startPoint.Y, current.Y),
Width = Math.Abs(startPoint.X - current.X),
Height = Math.Abs(startPoint.Y - current.Y)
};
using (var g = CreateGraphics())
{
g.DrawImage(screenShot, new Rectangle(0, 0, Size.Width, Size.Height), 0, 0, screenShot.Width, screenShot.Height, GraphicsUnit.Pixel);
DrawRectangle(g, rect.Left, rect.Top, rect.Right, rect.Bottom);
}
}
}
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Escape)
{
this.Close();
}
}
private void Form1_Load(object sender, EventArgs e)
{
screenShot = CaptureScreen();
this.BackgroundImage = screenShot;
this.Size = screenShot.Size;
}
public static Image CaptureScreen()
{
Rectangle screenSize = Screen.PrimaryScreen.Bounds;
Bitmap result = new Bitmap(screenSize.Width, screenSize.Height);
using (Graphics g = Graphics.FromImage(result))
{
g.CopyFromScreen(screenSize.Left, screenSize.Top, 0, 0, screenSize.Size);
}
return result;
}
public static void DrawRectangle(Graphics g, int x1, int y1, int x2, int y2)
{
int xmin = Math.Min(x1, x2);
int ymin = Math.Min(y1, y2);
int width = Math.Abs(x1 - x2);
int height = Math.Abs(y1 - y2);
var pen = new Pen(Color.Red);
g.DrawRectangle(pen, xmin, ymin, width, height);
}
}
其中,CaptureScreen()方法是用于截取屏幕原始画面的,DrawRectangle()方法是用于绘制选区框的。
四、项目应用
以上代码实现了截屏、绘制选区框和选中区域显示,最后形成了一个完整的截图工具。
以下是一个使用截图工具进行截图并保存到本地的代码示例:
private void btnScreenShot_Click(object sender, EventArgs e)
{
var form = new Form1();
form.ShowDialog();
if (form.pictureBox1.Image != null)
{
var saveFileDialog1 = new SaveFileDialog();
saveFileDialog1.Filter = "jpg files (*.jpg)|*.jpg|png files (*.png)|*.png|bmp files (*.bmp)|*.bmp";
saveFileDialog1.FilterIndex = 1;
saveFileDialog1.RestoreDirectory = true;
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
var file = saveFileDialog1.FileName;
form.pictureBox1.Image.Save(file, System.Drawing.Imaging.ImageFormat.Jpeg); // 其他文件格式需要修改此处
MessageBox.Show("截图已成功保存到:" + file);
}
}
}
该代码通过点击Button按钮调用新建的窗体Form1,截取到选取的屏幕区域,并将截图保存到本地。保存的文件格式可以通过代码中的System.Drawing.Imaging.ImageFormat.Jpeg进行修改。
总结
C#实现截图工具相对简单,代码实现也比较容易理解。在开发过程中我们主要是通过一些C#内置的类以及对窗体的操作进行实现,最终形成一个有用的工具。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#实现截图工具小项目 - Python技术站