Выглядеть это будет так:
Добавлять их в проект нужно обязательно, иначе наши дальнейшие действия не имеют смысла.
Следующим шагом добавьте в проект этот класс:
ScreenFixCore.cs 19.3 KB
Данный класс будет служить конструктором, он содержит все компоненты для работы, а мы только будем вызывать из него функции и извлекать нужные значения.
Перейдём к форме, перечислю, какие компоненты будут использоваться:
В форме у меня были добавлены только эти директивы Using (удалил те, которые не использовал):
Для начала следует сделать импорт необходимых системных библиотек, которые по неизвестной мне причине не импортируются автоматически, но лежат в одной папке со всеми библиотеками .NET фреимворка.
Как их найти, показано в таблице ниже:
Как их найти, показано в таблице ниже:
Расположение Библиотеки 
 | |
PresentationCore.dll 
 | 
C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Profile\Client\PresentationCore.dll 
 | 
PresentationFramework.dll 
 | 
C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Profile\Client\PresentationFramework.dll 
 | 
WindowsBase.dll 
 | 
C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Profile\Client\WindowsBase.dll 
 | 
System.Xaml.dll 
 | 
C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Profile\Client\System.Xaml.dll 
 | 
Следующим шагом добавьте в проект этот класс:
ScreenFixCore.cs 19.3 KB
Данный класс будет служить конструктором, он содержит все компоненты для работы, а мы только будем вызывать из него функции и извлекать нужные значения.
Перейдём к форме, перечислю, какие компоненты будут использоваться:
В форме у меня были добавлены только эти директивы Using (удалил те, которые не использовал):
using System;
using System.Windows.Forms;
using System.Drawing;
using System.Windows.Media.Imaging;
using System.IO;
Необходимые переменные класса Form1:
private Bitmap bmp1;
Виджеты:
Для данного примера понадобятся
pictureBox1 - контейнер для изображения
toolStripButton - обычная кнопка, но в моём случае ещё и элемент панели инструментов. Можно и без неё обойтись, разницы никакой, разве что визуальная.
Класс ScreenFixCore.cs должен обязательно находиться в проекте.
А теперь о функции, которая делает снимок.
Вот она:
        private void toolStripButton3_Click(object sender, EventArgs e)
        {
            //Бла бла бла, лень писать на всё комментарий =)
            //Описание каждой функции можно посмотреть если в контрекстном
            //меню найти и выбрать пункт "Перейти к определению"
            System.Windows.Media.Color ColorBackScreen = System.Windows.Media.Colors.Black;
            System.Windows.Media.Brush BrushLinesRect = System.Windows.Media.Brushes.Red;
            BitmapSource bmpImage =
                ScreenFixCore.ScreenshotMaker.BeginSelectionImageFromScreen(BrushLinesRect, 1.0d, ColorBackScreen);
            System.Drawing.Bitmap bitmap;
            using (MemoryStream outStream = new MemoryStream())
            {
                BitmapEncoder enc = new BmpBitmapEncoder();
                enc.Frames.Add(BitmapFrame.Create(bmpImage));
                enc.Save(outStream);
                bitmap = new System.Drawing.Bitmap(outStream);
            }
            bmp1 = new Bitmap(bitmap);
            pictureBox1.Image = bmp1;
        }
А теперь ловим исходник, в нём функций уже больше, но статья написана на основе него и на скриншоте, который выше показана именно его работа.
ScreenShot2.rar   92.4 KB

5 коммент.:
Все бы хорошо, но если два монитора...
Как сменить цвет крестика?
ScreenFixCore.cs Обновите ссылку!!
ScreenFixCore.cs Обновите ссылку!!
Отправить комментарий