using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Imaging;

namespace printScreen
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btPrintScreen_Click(object sender, EventArgs e)
        {

            
            /*Estas primeiras 3 linhas servem apenas para verificar qual a resolução
            que o computador está a utilizar*/
            Rectangle resolucao = Screen.PrimaryScreen.Bounds;
            int altura = resolucao.Size.Height;
            int largura = resolucao.Size.Width;


            //Agora criamos um novo bitmap que irá aboserver a resolução do ecra
            Bitmap printscreen = new Bitmap(largura, altura);

            //Definimos o bitmap como imagem
            Graphics graphics = Graphics.FromImage(printscreen as Image);
            
            //Nas duas linhas seguintes, indicámos qual é a posição de início do bitmap
            int esquerda = 0;
            int topo = 0;

            /*Associámos a imagem bitmap ao objecto graphics, com a informação de onde começa a imagem,
            e qual tamanho que terá*/
            graphics.CopyFromScreen(esquerda, topo, 0, 0, printscreen.Size);


            //Por fim, basta apenas indicar o caminho, o nome da imagem, a extensão e o formato
            string caminho = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
            string nome = "PrintScreen Peopleware";
            printscreen.Save(caminho + "\\" + nome+".jpg", ImageFormat.Jpeg);
        }

        private void btPrintScreenEcra_Click(object sender, EventArgs e)
        {
            //Definimos qual a dimensão do bitmap
            //A utilização do Bounds.Width irá permitir que o programa "saiba" onde começa a aplicação
            Bitmap printscreen = new Bitmap(this.Bounds.Width, this.Bounds.Height);

            //Definimos o bitmap como imagem
            Graphics graphics = Graphics.FromImage(printscreen);

            //O uso do this.Bounds é fundamental para que o printscreen apenas incida sobre a aplicação
            //O this.Bounds.Size determina automaticamente qual a dimensão da janela da aplicação
            graphics.CopyFromScreen(this.Bounds.X, this.Bounds.Y, 0, 0, this.Bounds.Size);

            //Por fim, basta apenas indicar o caminho, o nome da imagem, a extensão e o formato
            string caminho = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
            string nome = "PrintScreen Peopleware";
            printscreen.Save(caminho + "\\" + nome + ".jpg", ImageFormat.Jpeg);
        }

        private void btPrintScreenDialog_Click(object sender, EventArgs e)
        {
            //Definimos qual a dimensão do bitmap
            //A utilização do Bounds.Width irá permitir que o programa "saiba" onde começa a aplicação
            Bitmap printscreen = new Bitmap(this.Bounds.Width, this.Bounds.Height);

            //Definimos o bitmap como imagem
            Graphics graphics = Graphics.FromImage(printscreen);

            //O uso do this.Bounds é fundamental para que o printscreen apenas incida sobre a aplicação
            //O this.Bounds.Size determina automaticamente qual a dimensão da janela da aplicação
            graphics.CopyFromScreen(this.Bounds.X, this.Bounds.Y, 0, 0, this.Bounds.Size);

            //Chamámos um Save Image Dialog para podermos escolher onde guardar a imagem
            SaveFileDialog saveImageDialog = new SaveFileDialog();

            //Definimos qual o titulo desse Dialog
            saveImageDialog.Title = "Seleccionar caminho do Ficheiro:";

            //Definimos os filtros da extensão da imagem
            saveImageDialog.Filter = "JPEG |*.jpg|Bitmap Image|*.bmp|Gif Image|*.gif|PNG Image|*.png|All files (*.*)|*.*";
            
            //E por fim, verificamos se o utilizador clica no botão guardar
            if (saveImageDialog.ShowDialog() == DialogResult.OK)
            {
               //E grava como imagem o printscreen
                printscreen.Save(saveImageDialog.FileName, ImageFormat.Jpeg);
            }
        }
    }
}
