Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
9 / 9 / 7
Регистрация: 01.03.2015
Сообщений: 182

Сохранить снимок экрана в bmp-файл

30.08.2015, 12:13. Показов 1298. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
мне нужно программно заскринить экран(не весь) и сохранить в 1.bmp , причём от должен быть RGB и по 8 бит на канал

делал так, но не знаю как задать эти требования(можно попробовать перевести из 32 бит в 8)
C#
1
2
 Image image = Utilities.CaptureWindow(hghandle);
                        Bitmap bitmap1 = new Bitmap(image);
а вот класс
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
  public static class Utilities
        {
            public static Image CaptureScreen()
            {
                return CaptureWindow(User32.GetDesktopWindow());
            }
 
            public static Image CaptureWindow(IntPtr handle)
            {
 
                IntPtr hdcSrc = User32.GetWindowDC(handle);
 
                RECT windowRect = new RECT();
                User32.GetWindowRect(handle, ref windowRect);
 
                int width = windowRect.right - windowRect.left;
                int height = windowRect.bottom - windowRect.top;
 
                IntPtr hdcDest = Gdi32.CreateCompatibleDC(hdcSrc);
                IntPtr hBitmap = Gdi32.CreateCompatibleBitmap(hdcSrc, width, height);
 
                IntPtr hOld = Gdi32.SelectObject(hdcDest, hBitmap);
                Gdi32.BitBlt(hdcDest, 0, 0, width, height, hdcSrc, 0, 0, SRCCOPY);
                Gdi32.SelectObject(hdcDest, hOld);
                Gdi32.DeleteDC(hdcDest);
                User32.ReleaseDC(handle, hdcSrc);
 
                Image image = Image.FromHbitmap(hBitmap);
                Gdi32.DeleteObject(hBitmap);
 
                return image;
            }
 
            public class Gdi32
            {
                [DllImport("gdi32.dll")]
                public static extern bool BitBlt(IntPtr hObject, int nXDest, int nYDest, int nWidth, int nHeight, IntPtr hObjectSource, int nXSrc, int nYSrc, int dwRop);
                [DllImport("gdi32.dll")]
                public static extern IntPtr CreateCompatibleBitmap(IntPtr hDC, int nWidth, int nHeight);
                [DllImport("gdi32.dll")]
                public static extern IntPtr CreateCompatibleDC(IntPtr hDC);
                [DllImport("gdi32.dll")]
                public static extern bool DeleteDC(IntPtr hDC);
                [DllImport("gdi32.dll")]
                public static extern bool DeleteObject(IntPtr hObject);
                [DllImport("gdi32.dll")]
                public static extern IntPtr SelectObject(IntPtr hDC, IntPtr hObject);
            }
 
            public static class User32
            {
                [DllImport("user32.dll")]
                public static extern IntPtr GetDesktopWindow();
                [DllImport("user32.dll")]
                public static extern IntPtr GetWindowDC(IntPtr hWnd);
                [DllImport("user32.dll")]
                public static extern IntPtr GetWindowRect(IntPtr hWnd, ref RECT rect);
                [DllImport("user32.dll")]
                public static extern IntPtr ReleaseDC(IntPtr hWnd, IntPtr hDC);
            }
 
            public const int SRCCOPY = 13369376;
 
            [StructLayout(LayoutKind.Sequential)]
            public struct RECT
            {
                public int left;
                public int top;
                public int right;
                public int bottom;
            }}
Добавлено через 51 минуту
то есть в 256-цветной рисунок
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.08.2015, 12:13
Ответы с готовыми решениями:

Сохранить содержимое webbrowser в файл (jpg или bmp)
Есть элемент webbrowser с содержимым. Как сохранить содержимое в файл указанного формат, например jpg? Добавлено через 19 минут ...

Как сохранить все изображенное на форме в bmp файл программным образом
Здравствуйте. Подскажите пожалуйста как можно сохранить все изображенное на форме в виде bmp файла. Просто у меня создаются контролы с...

Получить снимок экрана
Очень интересует исходный код принт скрина и сохранения в файл результата на C#, заранее спасибо!

1
TheGreatCornholio
 Аватар для Woldemar89
1255 / 733 / 285
Регистрация: 30.07.2015
Сообщений: 2,408
30.08.2015, 13:42
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 private void button4_Click(object sender, EventArgs e)
        {
            Image img256 = ConvertTo8bpp(pictureBox1.Image);
            pictureBox1.Image.Dispose();
            pictureBox1.Image = img256;
        }
 
 
        public static Bitmap ConvertTo8bpp(Image img)
        {
            var ms = new System.IO.MemoryStream();  
            img.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);  //у гифов - формат 256 цветов
            ms.Position = 0;
            return new Bitmap(ms);
        }
Добавлено через 10 минут
Хотя тут походу не на канал 8 бит а на пиксель.

Добавлено через 2 минуты
https://msdn.microsoft.com/ru-... .110).aspx
Читай, там где в коде // Set every third value to 255. A 24bpp bitmap will look red.
24bpp - как раз на каждый канал 8 бит.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.08.2015, 13:42
Помогаю со студенческими работами здесь

Как получить снимок экрана?
Интересно, как програмно это выполнить??

Снимок экрана второго монитора средствами WinAPI
Доброго времени суток. Данная функция делает снимок основного монитора средствами WinAPI. Как можно получить снимки остальных...

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

Сделать снимок с веб-камеры, сохранить на диск с сохранением пути в БД
Здравствуйте, требуется написать программу учета рабочего времени сотрудников. Если в целом, то задача сводится к тому, что есть таблица, в...

Как сохранить содержимое canvas в *.bmp файл
Подскажите, пожалуйста, как сохранить содержимое canvas в bmp файл? я понимаю, что для этого нужно получить Image c canvasа, но как?


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru