以前在別處見過透過呼叫系統 API 實現螢幕截圖的範例,內心來說我不太喜歡在 C# 程式碼中出現這種情況。現在什麼都講「和諧」,覺得這種做法破壞了我們的「和諧」程式碼,呵呵,開玩笑的,有時候不透過系統 API 確實難以做到。
下面講述如何透過純 C# 實現螢幕截圖,程式碼如下:
// 擷取全螢幕影像
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);
}
}
這段程式碼其實很簡單,可設定截圖區域位置與大小,只不過只能在 .NET 2.0 環境中執行。筆者正進一步完善實現拖曳截圖技術,類似 QQ 的截圖辦法,攻關中,若完成再向大家公布原始碼。