Em algumas situações pode ser necessário tirar uma foto (print screen, screenshot) da tela a partir de nossas aplicações C# e salvá-la como uma imagem JPG. Para isso podemos usar o método CopyFromScreen() da classe Graphics. A versão mais simples deste método possui a seguinte assinatura:
public void CopyFromScreen(Point upperLeftSource,
Point upperLeftDestination, Size blockRegionSize);
O parâmetro upperLeftSource indica as coordenadas x e y a partir da tela, ou seja, de onde a imagem está sendo copiada. O parâmetro upperLeftDestination indica as coordenadas x e y do objeto no qual o desenho será feito. Finalmente o parâmetro blockRegionSize indica o tamanho da área a ser transferida. Note que Point.Empty indica o valor 0 para x e y.
Veja um trecho de código no qual clicamos em um botão, tiramos o print screen da tela e salvamos a imagem com o nome de "foto_tela.jpg":
private void button1_Click_1(object sender, EventArgs e){
// vamos obter um retângulo representando o tamanho completo da tela
Rectangle bounds = Screen.GetBounds(Point.Empty);
// vamos criar um Bitmap do tamanho da tela
Bitmap bitmap = new Bitmap(bounds.Width, bounds.Height);
// agora obtemos um Graphics a partir do Bitmap
Graphics g = Graphics.FromImage(bitmap);
// obtemos o print screen da tela
g.CopyFromScreen(Point.Empty, Point.Empty, bounds.Size);
// e finalmente salvamos como um arquivo JPG
bitmap.Save("foto_tela.jpg", ImageFormat.Jpeg);
// vamos liberar o objeto Graphics
g.Dispose();
// vamos liberar o Bitmap
bitmap.Dispose();
}
Veja que aqui eu usei o valor Jpeg da classe ImageFormat (no namespace System.Drawing.Imaging) para indicar que a foto da tela será salva como JPEG. Se você quiser outro formato, bastará indicar outros valores, tais como Png, Bmp, Gif, etc.
|