基于C#實現(xiàn)Windows桌面截圖功能
更新時間:2025年05月12日 11:29:25 作者:編程筆記in
在學習C# 的過程中,通過案例是比較高效的一種學習方式,下面我將介紹如何使用C#開發(fā)一個簡單的Windows桌面截圖程序,這個程序?qū)崿F(xiàn)了基本的屏幕截圖功能,感興趣的小伙伴跟著小編一起來看看吧
前言
- 在學習C# 的過程中,通過案例是比較高效的一種學習方式。下面我將介紹如何使用C#開發(fā)一個簡單的Windows桌面截圖程序。這個程序?qū)崿F(xiàn)了基本的屏幕截圖功能,包括捕獲全屏、預覽圖像以及保存截圖文件。通過該案例,可以了解到Windows窗體應用(WinForms)的開發(fā)知識,并理解GDI+繪圖技術(shù)、文件對話框的使用以及事件驅(qū)動編程的核心概念。
- 實現(xiàn)的功能雖然簡單,但涵蓋了實際開發(fā)中的關(guān)鍵流程,如UI設計、功能邏輯實現(xiàn)、異常處理等。
知識梳理
實現(xiàn)功能:
- 1、點擊按鈕截圖。
- 2、截圖顯示、拖動縮放、功能。
- 3、截圖保存。
實現(xiàn)步驟:
- 1、獲取屏幕邊界。
- 2、創(chuàng)建位圖對象。
- 3、屏幕內(nèi)容捕獲
- 4、內(nèi)容傳遞。
- 5、顯示截圖編輯器窗口。
核心方法1:
Screen.GetBounds(Point)- 該方法用于獲取主顯示器的邊界矩形。
- 一般從屏幕左上角(0,0)開始計算。
核心方法2:
CopyFromScreen(Point,Point,Point)- 該方法實現(xiàn)屏幕內(nèi)容拷貝。
- 參數(shù)一:源位置左上角坐標。
- 參數(shù)二:目標位置左上角坐標。
- 參數(shù)三:要拷貝的區(qū)域大小。
自定義顯示圖像窗體:
FrmScreenshotEditor控件代碼在文末鏈接,需要者自行下載。
運行效果

代碼
主窗體代碼
- 主窗體中添加截圖按鈕,實現(xiàn)點擊按鈕截圖功能,在截圖前隱藏該窗體主窗體,否則會截到主窗體,添加一定的延時,否則還是會截到主窗體,因為主窗體可能未隱藏成功。截圖成功后再顯示主窗體和子窗體。
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
this.CenterToParent();
this.MaximumSize = this.Size;
this.MinimumSize = this.Size;
}
private void Btn_Screenshot_Click(object sender, EventArgs e)
{
this.Hide();
Thread.Sleep(500);
Screenshot();
}
/// 截圖方法
private void Screenshot()
{
try
{
// 獲取屏幕尺寸
Rectangle bounds = Screen.GetBounds(Point.Empty);
// 創(chuàng)建位圖對象
using (Bitmap bitmap = new Bitmap(bounds.Width, bounds.Height))
{
// 創(chuàng)建繪圖對象
using (Graphics g = Graphics.FromImage(bitmap))
{
// 將屏幕內(nèi)容復制到位圖中
g.CopyFromScreen(Point.Empty, Point.Empty, bounds.Size);
}
this.Show();
//顯示圖像
FrmScreenshotEditor frmScreenshotEditor = new FrmScreenshotEditor();
frmScreenshotEditor.Image = bitmap;
frmScreenshotEditor.ShowDialog();
}
}
catch (Exception ex)
{
MessageBox.Show($"截圖失敗: {ex.Message}", "錯誤",MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
截圖編輯窗體
- 在截圖編輯子窗體中添加自定義圖像顯示控件,該控件需要實現(xiàn)圖像的滾動和縮放功能。添加一個Image屬性,用于設置顯示的圖片。最后添加一個保存按鈕,實現(xiàn)圖像保存功能。
public partial class FrmScreenshotEditor :WinFormBase
{
public Image Image
{
get => uvCanvas.Image;
set
{
uvCanvas.Image = value;
Invalidate();
}
}
public FrmScreenshotEditor()
{
InitializeComponent();
this.CenterToParent();
this.WindowState = FormWindowState.Maximized;
}
private void btn_Save_Click(object sender, System.EventArgs e)
{
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.FileName = "截圖1"; //設置初始文件名
saveFileDialog.Filter= "PNG Image|*.png|JPEG Image|*.jpg|BMP Image|*.bmp";
if (saveFileDialog.ShowDialog()== DialogResult.OK)
{
string extension = Path.GetExtension(saveFileDialog.FileName).ToLower();
ImageFormat imageFormat;
switch (extension)
{
case ".png":
imageFormat = ImageFormat.Png;
break;
case ".jpg":
imageFormat = ImageFormat.Jpeg;
break;
case ".bmp":
imageFormat = ImageFormat.Bmp;
break;
default:
imageFormat = ImageFormat.Png;
break;
}
try
{
Image.Save(saveFileDialog.FileName, imageFormat);
MessageBox.Show($"圖片已成功保存至: {saveFileDialog.FileName}");
}
catch (Exception ex)
{
MessageBox.Show($"保存圖片時出錯: {ex.Message}");
}
}
}
}
總結(jié)
- 通過實現(xiàn)案例學習編程是一種高效的學習方法。這種學習方式將抽象概念具體化。通過上面的截圖程序,我們實際應用了窗體控件、事件處理、GDI+繪圖等核心知識點,比單純學習理論更容易理解和記憶。
- 其次通過案例可以獲得正向反饋,看到自己編寫的代碼真正實現(xiàn)功能,極大提升了學習動力和成就感。
- 最后,該案例后面可以自己擴展性,當你掌握了更多的基礎知識后,可以逐步添加區(qū)域選擇、圖像編輯等更高級的功能。
最后
以上就是基于C#實現(xiàn)Windows桌面截圖功能的詳細內(nèi)容,更多關(guān)于C# Windows桌面截圖的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
如何使用LinQ To Object把數(shù)組或DataTable中的數(shù)據(jù)進行向上匯總
這篇文章主要介紹了如何使用LinQ To Object把數(shù)組或DataTable中的數(shù)據(jù)進行向上匯總,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-12-12
C#判斷字符串中內(nèi)容是否為純數(shù)字的詳細教程
在進行C#編程時候,有的時候我們需要判斷一個字符串是否是數(shù)字字符串,下面這篇文章主要給大家介紹了關(guān)于C#判斷字符串中內(nèi)容是否為純數(shù)字的詳細教程,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2023-04-04
C#實現(xiàn)多種圖片格式轉(zhuǎn)換的示例詳解
這篇文章主要為大家詳細介紹了C#如何實現(xiàn)多種圖片格式轉(zhuǎn)換,例如轉(zhuǎn)換成圖標圖像ICO,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下2024-01-01
C#中的矩形數(shù)組(多維數(shù)組)和鋸齒數(shù)組的實現(xiàn)
本文主要介紹了C#中的矩形數(shù)組(多維數(shù)組)和鋸齒數(shù)組的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-04-04

