呼叫 Windows API 雖可行,但破壞程式碼「和諧性」。.NET 2.0 提供 Graphics.CopyFromScreen 完美解決。
private void btnFullScreen_Click(object sender, EventArgs e) {
// 建立位圖容器
Bitmap image = new Bitmap(Screen.PrimaryScreen.Bounds.Width,
Screen.PrimaryScreen.Bounds.Height);
Graphics imgGraphics = Graphics.FromImage(image);
// 複製螢幕內容到位圖
imgGraphics.CopyFromScreen(0, 0, 0, 0,
new Size(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height));
// 存檔
SaveImage(image);
}
private void SaveImage(Image image) {
if (saveFileDialog.ShowDialog(this) == DialogResult.OK) {
string fileName = saveFileDialog.FileName;
string extension = Path.GetExtension(fileName);
if (extension == ".jpg")
image.Save(fileName, ImageFormat.Jpeg);
else
image.Save(fileName, ImageFormat.Bmp);
}
}
Screen.PrimaryScreen.Bounds:取得主螢幕解析度Graphics.FromImage:建立繪圖介面指向位圖CopyFromScreen(srcX, srcY, destX, destY, size):從螢幕座標複製像素到位圖.jpg、.bmp 格式儲存作者正研發「拖曳選取區域截圖」功能(類似 QQ 截圖),完成後將公開原始碼。核心邏輯同樣使用 CopyFromScreen,差別在於動態計算選取矩形座標與大小。