воскресенье, 22 июля 2012 г.

C# Делаем скриншот всего экрана

Как всегда, выложу исходник готовой функции и описание как ей пользоваться.

Функция, которая делает нам скрин и возвращает результат в виде изображения (экземпляр класса Bitmap).

        private Bitmap TakeScreenShot(Screen currentScreen)
        {
            Bitmap bmpScreenShot = new Bitmap(currentScreen.Bounds.Width,
                                              currentScreen.Bounds.Height,
                                              System.Drawing.Imaging.PixelFormat.Format32bppArgb);

            Graphics gScreenShot = Graphics.FromImage(bmpScreenShot);

            gScreenShot.CopyFromScreen(currentScreen.Bounds.X,
                                       currentScreen.Bounds.Y,
                                       0, 0,
                                       currentScreen.Bounds.Size,
                                       CopyPixelOperation.SourceCopy);
            return bmpScreenShot;
        }

Пример использования функции:

        private Bitmap bmp;
        private void toolStripButton1_Click(object sender, EventArgs e)
        {
            //это действие задаёт параметр расположения 
            //изображения в pictureBox1
            pictureBox1.SizeMode = PictureBoxSizeMode.Zoom;

            //Делаем снимок экрана (изображение в памяти)
            Image pr = TakeScreenShot(Screen.PrimaryScreen);

            //Создание экземпляра класса Bitmap, в котом  
            //будет короткое время храниться наше изображение
            bmp = new Bitmap(pr);

            //Впихиваем изображение в pictureBox1
            pictureBox1.Image = bmp;
        }
Также выложу в качестве примера исходник, который ещё и умеет сохранять сделанный скрин:

ScreenShot.rar   53.3 KB

2 комментария:

  1. private void button2_Click(object sender, EventArgs e)
    {
    //это действие задаёт параметр расположения
    //изображения в pictureBox1
    pictureBox1.SizeMode = PictureBoxSizeMode.Zoom;

    //Делаем снимок экрана (изображение в памяти)


    //Создание экземпляра класса Bitmap, в котом
    //будет короткое время храниться наше изображение


    //Впихиваем изображение в pictureBox1
    pictureBox1.Image = TakeScreenShot(Screen.PrimaryScreen);
    }

    Можно скоратить метод, не создавая лишних экземпляров класса, что с экономит время выполнения работы программы и оперативную память вашей машины.

    ОтветитьУдалить