首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> C# 入門

C# 螢幕截圖程式開發 (一):GDI+ 與 GDI 互操作原理

     編輯:C# 入門

技術背景

C# 結合 VB 快速開發與 C++ 高效能,基於 .NET Framework 提供強大圖形/網路程式能力。GDI+ 為 GDI 演進版,封裝繁雜細節,但仍可透過 P/Invoke 呼叫 GDI 底層功能 (如 BitBlt) 實現高效螢幕截圖。

核心 P/Invoke 宣告

using System.Runtime.InteropServices;

[DllImport("gdi32.dll")]
private static extern bool BitBlt(
    IntPtr hdcDest,   // 目標裝置內容 (DC) 控制碼
    int nXDest,       // 目標矩形左上角 X
    int nYDest,       // 目標矩形左上角 Y
    int nWidth,       // 寬度
    int nHeight,      // 高度
    IntPtr hdcSrc,    // 來源 DC 控制碼
    int nXSrc,        // 來源矩形左上角 X
    int nYSrc,        // 來源矩形左上角 Y
    int dwRop         // 光柵操作代碼 (SRCCOPY = 0x00CC0020)
);

裝置內容 (DC) 取得與釋放

  • GDI+ 取得 DC:IntPtr hdc = graphics.GetHdc(); (對應 Graphics 物件)。
  • 釋放 DC:graphics.ReleaseHdc(hdc); (必須成對呼叫,否則資源洩漏)。
  • 螢幕 DC:IntPtr screenDc = GetDC(IntPtr.Zero); (需 DllImport("user32.dll") 宣告 GetDC/ReleaseDC)。

截圖流程

  1. 建立對應表單/螢幕大小的 Bitmap。
  2. 從 Bitmap 建立 Graphics,取得目標 DC (hdcDest)。
  3. 取得螢幕 DC (hdcSrc)。
  4. 呼叫 BitBlt(hdcDest, 0, 0, width, height, hdcSrc, 0, 0, SRCCOPY) 將螢幕像素複製至 Bitmap。
  5. 釋放兩個 DC。
  6. 儲存 Bitmap 為 JPEG/PNG。

關鍵常數

private const int SRCCOPY = 0x00CC0020; // 直接複製像素
// 其他常見:CAPTUREBLT = 0x40000000 (包含分層視窗)

下一節預告

下一節將展示完整 WinForms 專案佈局、控件配置與按鈕點擊事件中的完整截圖程式碼。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved