Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/40: Рейтинг темы: голосов - 40, средняя оценка - 4.78
9 / 9 / 0
Регистрация: 07.10.2011
Сообщений: 187
1

Как сделать скриншот экрана?

11.04.2016, 01:48. Показов 7527. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Как сделать скриншот экрана (допустим, 200 на 300px, по координатам x: 150, y: 20) и поместить его в image?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.04.2016, 01:48
Ответы с готовыми решениями:

[WPF] Как сделать скриншот?
Что мне надо использовать что бы сделать скриншот на с# и WPF?

Как сделать скриншот окна(контрола)
Ну в общем то в теме весь вопрос, очень хочется получить картинку из содержимого окна. Спасибо.

[WPF] Скриншот выделенной области экрана
Подскажите, пожалуйста, как правильно проделать следующие действия: пользователь нажимает кнопку...

Как сделать скриншот браузера и обработать пиксели скриншота
Люди, помогите пожалуйста. Нужно сделать скриншот браузера и потом в цикле проверить каждый пиксель...

10
64 / 65 / 44
Регистрация: 05.12.2014
Сообщений: 475
11.04.2016, 16:18 2
http://stackoverflow.com/quest... creenshots
1
9 / 9 / 0
Регистрация: 07.10.2011
Сообщений: 187
11.04.2016, 20:37  [ТС] 3
И теперь вопрос, как массив байт загнать в image.Source?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
        public byte[] Take() {
            int screenWidth = Convert.ToInt32(SystemParameters.VirtualScreenWidth);
            int screenHeight = Convert.ToInt32(SystemParameters.VirtualScreenHeight);
            int screenLeft = Convert.ToInt32(SystemParameters.VirtualScreenLeft);
            int screenTop = Convert.ToInt32(SystemParameters.VirtualScreenTop);
 
            RenderTargetBitmap renderTarget = new RenderTargetBitmap(screenWidth, screenHeight, 96, 96, PixelFormats.Pbgra32);
            VisualBrush sourceBrush = new VisualBrush();
 
            DrawingVisual drawingVisual = new DrawingVisual();
            DrawingContext drawingContext = drawingVisual.RenderOpen();
 
            using(drawingContext) {
                drawingContext.PushTransform(new ScaleTransform(1, 1));
                drawingContext.DrawRectangle(sourceBrush, null, new Rect(new Point(0, 0), new Point(screenWidth, screenHeight)));
            }
            renderTarget.Render(drawingVisual);
 
            PngBitmapEncoder pngEncoder = new PngBitmapEncoder();
            pngEncoder.Frames.Add(BitmapFrame.Create(renderTarget));
 
            Byte[] _imageArray;
 
            using(MemoryStream outputStream = new MemoryStream()) {
                pngEncoder.Save(outputStream);
                _imageArray = outputStream.ToArray();
            }
 
 
            return _imageArray;
        }
Ещё более важный вопрос, как правильно искать информацию? Потому что гугление "c# wpf Byte image.Source" выдает либо чистый шарп, либо ничего, и так везде

Как искать информацию по реализациям WPF, если поисковики выдают обычный шарп?
0
64 / 65 / 44
Регистрация: 05.12.2014
Сообщений: 475
11.04.2016, 21:50 4
я сам не пробовал ещё сделать скриншот, но помойму вы взяли решение из вопроса по ссылке, а там следующим сообщением идёт ответ:

First you'll need to add references for the following namespaces:
C#
1
2
3
using System.Drawing;
using System.Drawing.Imaging;
using System.Windows.Forms;
Then enumerate your monitors to get the bounding rectangle for all display surfaces and pass that in to the Graphics.CopyFromScreen() method call:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
private static BitmapSource CopyScreen()
{
    var left = Screen.AllScreens.Min(screen => screen.Bounds.X);
    var top = Screen.AllScreens.Min(screen => screen.Bounds.Y);
    var right = Screen.AllScreens.Max(screen => screen.Bounds.X + screen.Bounds.Width);
    var bottom = Screen.AllScreens.Max(screen => screen.Bounds.Y + screen.Bounds.Height);
    var width = right - left;
    var height = bottom - top;
 
    using (var screenBmp = new Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format32bppArgb))
    {
        using (var bmpGraphics = Graphics.FromImage(screenBmp))
        {
            bmpGraphics.CopyFromScreen(left, top, 0, 0, new System.Drawing.Size(width, height));
            return Imaging.CreateBitmapSourceFromHBitmap(
                screenBmp.GetHbitmap(),
                IntPtr.Zero,
                Int32Rect.Empty,
                BitmapSizeOptions.FromEmptyOptions());
        }
    }
}
и вроде всё делается без массива байт, хотя, ещё раз повторюсь - сам не побовал.
0
9 / 9 / 0
Регистрация: 07.10.2011
Сообщений: 187
11.04.2016, 22:58  [ТС] 5
Этого вообще нет в wpf, код опять же для просто шапра

C#
1
2
3
4
new Bitmap
 
using System.Drawing.Imaging;
using System.Windows.Forms;
0
343 / 305 / 135
Регистрация: 14.03.2015
Сообщений: 1,140
Записей в блоге: 1
12.04.2016, 00:49 6
Цитата Сообщение от Fangod Посмотреть сообщение
гугление "c# wpf Byte image.Source"
stack
0
64 / 65 / 44
Регистрация: 05.12.2014
Сообщений: 475
12.04.2016, 20:19 7
Цитата Сообщение от Fangod Посмотреть сообщение
Этого вообще нет в wpf, код опять же для просто шапра
добавил ссылки к проекту (add reference) к Forms и Drawing

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
....
using System.Drawing;
using System.Windows.Forms;
using System.Windows.Interop;
 
namespace WpfApplication1
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
 
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            System.Windows.Controls.Image img = new System.Windows.Controls.Image();
            img.Source = CopyScreen();
            canvas.Children.Add(img);
 
        }
        private BitmapSource CopyScreen()
        {
            var left = Screen.AllScreens.Min(screen => screen.Bounds.X);
            var top = Screen.AllScreens.Min(screen => screen.Bounds.Y);
            var right = Screen.AllScreens.Max(screen => screen.Bounds.X + screen.Bounds.Width);
            var bottom = Screen.AllScreens.Max(screen => screen.Bounds.Y + screen.Bounds.Height);
            var width = right - left;
            var height = bottom - top;
 
            using (var screenBmp = new Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format32bppArgb))
            {
                using (var bmpGraphics = Graphics.FromImage(screenBmp))
                {
                    bmpGraphics.CopyFromScreen(left, top, 0, 0, new System.Drawing.Size(width, height));
                    return Imaging.CreateBitmapSourceFromHBitmap(
                        screenBmp.GetHbitmap(),
                        IntPtr.Zero,
                        Int32Rect.Empty,
                        BitmapSizeOptions.FromEmptyOptions());
                }
            }
        }
    }
}
получил скриншот:
Миниатюры
Как сделать скриншот экрана?  
1
9 / 9 / 0
Регистрация: 07.10.2011
Сообщений: 187
13.04.2016, 10:27  [ТС] 8
А на сколько это православно добавлять ссылку на Windows.Forms?
Мне кажется, что это немного дико, или я не прав?
0
64 / 65 / 44
Регистрация: 05.12.2014
Сообщений: 475
13.04.2016, 10:30 9
Не знаю, но в книге по WPF есть глава посвящённая взаимодействию с Windows Forms, так что наверное норм
0
9 / 9 / 0
Регистрация: 07.10.2011
Сообщений: 187
13.04.2016, 10:55  [ТС] 10
А что за книга?
0
64 / 65 / 44
Регистрация: 05.12.2014
Сообщений: 475
13.04.2016, 14:30 11
http://www.ozon.ru/context/detail/id/21462174/
1
13.04.2016, 14:30
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.04.2016, 14:30
Помогаю со студенческими работами здесь

Шаблон для TreeView. Не получается сделать как задумал. Проект, код, скриншот внутри.
Хочу сделать шаблон для TreeView. Я прикрепил 2 изображения. Там видно белые прямоугольники, вот...

Сделать скриншот экрана, его часть с образцом и определить соответствие в процентах
Нужно сделать скриншот экрана, после чего сравнить его или его часть с образцом и определить...

Получить скриншот экрана из игры
Добрый день. Подскажите, пожалуйста, как можно получить скриншот экрана, если запущена игра. ...

Скриншот выделенного участка экрана
В вин7 есть утилитка, позволяющая "вырезать" часть текущего экрана, хочу реализовать нечто...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru