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

C# Делаем скрин выделенной области

Выглядеть это будет так:
Для начала следует сделать импорт необходимых системных библиотек, которые по неизвестной мне причине не импортируются автоматически, но лежат в одной папке со всеми библиотеками .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 коммент.:

Анонимный комментирует...

Все бы хорошо, но если два монитора...

Unknown комментирует...

Как сменить цвет крестика?

Eugene Stroustrup комментирует...
Этот комментарий был удален автором.
Анонимный комментирует...

ScreenFixCore.cs Обновите ссылку!!

Sergey комментирует...

ScreenFixCore.cs Обновите ссылку!!

Отправить комментарий

TROCKII БЛОГ Copyright © 2012 | Template created by Lev Trockii |