Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
 Аватар для Vitalik-2007
1 / 1 / 0
Регистрация: 27.05.2021
Сообщений: 97

Максимально быстрый скриншот

18.05.2022, 06:39. Показов 2187. Ответов 26
Метки с++ (Все метки)

Студворк — интернет-сервис помощи студентам
Как сделать максимально быстрый скриншот. Желательно в JPEG формате, но можно и в BMP?
Нужно хотя-бы 20-25 раз в секунду. Возможно ли это?
Visual Studio 2019 Windows
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.05.2022, 06:39
Ответы с готовыми решениями:

Максимально быстрый вариант вычисления sinf/cosf
Вопрос, возможно, не в ту ветку форума, но решение предполагается на с++, поэтому просьба расшифровать задание. Текст такой: Напишите...

Запрос данных с экрана максимально быстрый
Товарищи приветствую Вас! Помогите с проблемой Дело в том что, я раньше запрашивал пиксель на экране через: В Windows XP это...

Максимально быстрый, надежный компьютер
Собираюсь собрать компьютер. До 15000 руб, +/- 2 тис. (без видеокарты и SSD). Вот что я набросал: Процесор ...

26
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
18.05.2022, 09:06
Цитата Сообщение от Vitalik-2007 Посмотреть сообщение
Нужно хотя-бы 20-25 раз в секунду.
Это уже запись видео.
0
 Аватар для Vitalik-2007
1 / 1 / 0
Регистрация: 27.05.2021
Сообщений: 97
18.05.2022, 09:09  [ТС]
Цитата Сообщение от Croessmah Посмотреть сообщение
Это уже запись видео.
Можно и так. Я потом хочу через сокеты передавать на другой комп эти скриншоты
0
 Аватар для Nishen
1357 / 856 / 365
Регистрация: 26.02.2015
Сообщений: 3,814
18.05.2022, 09:10
Купи себе Стахановца.
0
 Аватар для Vitalik-2007
1 / 1 / 0
Регистрация: 27.05.2021
Сообщений: 97
18.05.2022, 09:11  [ТС]
Цитата Сообщение от Nishen Посмотреть сообщение
Купи себе Стахановца.
А программно как реализовать?
0
216 / 81 / 35
Регистрация: 29.10.2021
Сообщений: 304
18.05.2022, 10:26
Цитата Сообщение от Vitalik-2007 Посмотреть сообщение
А программно как реализовать?
Цитата Сообщение от Vitalik-2007 Посмотреть сообщение
Максимально быстрый скриншот
Цитата Сообщение от Vitalik-2007 Посмотреть сообщение
BMP в JPEG
Цитата Сообщение от Vitalik-2007 Посмотреть сообщение
Получить html код с++
пора знакомиться с каким-нибудь фреймворком: Qt, Net или др.
0
 Аватар для Vitalik-2007
1 / 1 / 0
Регистрация: 27.05.2021
Сообщений: 97
18.05.2022, 10:43  [ТС]
Цитата Сообщение от WhiteBelt Посмотреть сообщение
пора знакомиться с каким-нибудь фреймворком: Qt, Net или др.
Не очень давно начал замысливатся над этим. Думаю Qt то что нужно. Летом хотел начать изучать
0
 Аватар для Наталья8
518 / 368 / 65
Регистрация: 09.03.2016
Сообщений: 3,890
18.05.2022, 13:31
У меня делает тридцать раз в секунду. щас поищу... (winapi это windows)

Добавлено через 6 минут
В интернете есть. Гуглится легко.

C++
1
2
3
4
5
6
7
8
9
10
HDC hScreenDC = GetDC(nullptr); // CreateDC("DISPLAY",nullptr,nullptr,nullptr);
HDC hMemoryDC = CreateCompatibleDC(hScreenDC);
int width = GetDeviceCaps(hScreenDC,HORZRES);
int height = GetDeviceCaps(hScreenDC,VERTRES);
HBITMAP hBitmap = CreateCompatibleBitmap(hScreenDC,width,height);
HBITMAP hOldBitmap = static_cast<HBITMAP>(SelectObject(hMemoryDC,hBitmap));
BitBlt(hMemoryDC,0,0,width,height,hScreenDC,0,0,SRCCOPY);
hBitmap = static_cast<HBITMAP>(SelectObject(hMemoryDC,hOldBitmap));
DeleteDC(hMemoryDC);
DeleteDC(hScreenDC);
Добавлено через 32 секунды
https://stackoverflow.com/ques... pplication

Добавлено через 2 минуты
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#include< opencv2/opencv.hpp >
//#include <string>
//#include <iostream>
      #include< windows.h >
#include "io.h"
//#include<conio.h>
using namespace cv; 
using namespace std; 
void Hide();
 
//========================     https://***********/threads/screenshot-v-cv-mat.51042/
 
class Screen{
public:
Screen(){
// Параметры экрана
HWND hwnd = GetDesktopWindow(); 
hWDC = GetWindowDC( hwnd );
width = GetSystemMetrics( SM_CXSCREEN );
height = GetSystemMetrics( SM_CYSCREEN );
 
// Совместимый контекст в памяти
hScreen = CreateCompatibleDC( hWDC ); // - DeleteDC( hScreen );
hBM = CreateCompatibleBitmap( hWDC, width, height ); // - DeleteObject( hBM );
hBM_Temp = SelectObject( hScreen, hBM ); // - SelectObject( hScreen, hBM_Temp );
 
// Описание рабочего массива бит совместимого контекста в памяти
BMI.bmiHeader.biSize = sizeof( BITMAPINFOHEADER );
BMI.bmiHeader.biWidth = width;
BMI.bmiHeader.biHeight = -height;
BMI.bmiHeader.biPlanes = 1;
BMI.bmiHeader.biBitCount = 24;
BMI.bmiHeader.biCompression = BI_RGB;
 
// Массив данных скриншота
const int colorSize = 3; // Размер пикселя
const int alignment = 4; // Выравнивание строки        
int step = ( int )ceil( width * colorSize / ( double )alignment ) * alignment; // Шаг строки
//int step = ( width * colorSize / alignment + ( width * colorSize % alignment? 1: 0 ) ) * alignment; // Шаг строки
data = new char[ step * height ]; // - delete[] data;
 
// Скриншот
screen = new cv::Mat( height, width, CV_8UC3, data, step ); // - delete screen;
};
 
~Screen(){
SelectObject( hScreen, hBM_Temp );
DeleteObject( hBM );
DeleteDC( hScreen );
delete screen; screen = NULL;
delete[] data; data = NULL;
};
 
cv::Mat& get(){
BitBlt( hScreen, 0, 0, width, height, hWDC, 0, 0, SRCCOPY );
GetDIBits( hScreen, hBM, 0, height, data, &BMI, DIB_RGB_COLORS );
return *screen;
};
 
private:
HDC hWDC; // Контекст экрана
HDC hScreen; // Совместимый с экраном контекст в памяти
HBITMAP hBM; // Рабочий массив бит совместимого контекста в памяти
BITMAPINFO BMI; // Описание рабочего массива бит совместимого контекста в памяти
 
int width; // Ширина экрана в пикселях
int height; // Высота экрана в пикселях
 
char* data; // Массив данных скриншота
cv::Mat* screen; // Скриншот
 
HGDIOBJ hBM_Temp; // Массив бит совместимого контекста в памяти созданный по умолчанию 
};
 
////////////// Убрать консоль ////#include <windows.h>///////////////////////////
void Hide()
{
  HWND Hide;
  AllocConsole();
  Hide = FindWindowA("ConsoleWindowClass", NULL);
  ShowWindow(Hide,0);
}
//===========================
 
int main( int argc, char** argv ){
Hide(); // <<--- Убираем консоль
//-------------
Sleep(200);
Screen sh;
cv::Mat screen = sh.get();
//screen = imread( argv[1] );
 
if(access("E:\\_MyPath", 0)!=0) CreateDirectoryW(L"E:\\_MyPath", NULL); // создаём папку
//-----
cv::imwrite( "E:\\_MyPath\\snapshot.png", screen );
//getch();
return 0;
}
Добавлено через 4 минуты
Вот простейший рабочий.

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
#include <windows.h>
#include <stdio.h>
//-----------------------------
int     w, h;
void *  p;
 
void dump_bmp()
{
int                 i;
BITMAPFILEHEADER    bfh;
BITMAPINFOHEADER    bmi;
FILE *              fp;
 
memset( &bfh, 0, sizeof( BITMAPFILEHEADER ) );
memset( &bmi, 0, sizeof( BITMAPINFOHEADER ) );
 
bfh.bfType      = 0x4d42; // "BM"
bfh.bfSize      = sizeof( BITMAPFILEHEADER ) + w * h * 4;
bfh.bfOffBits   = sizeof( BITMAPFILEHEADER ) + sizeof( BITMAPINFOHEADER );
 
bmi.biSize          = sizeof( BITMAPINFOHEADER );
bmi.biWidth         = w;
bmi.biHeight        = h;
bmi.biPlanes        = 1;
bmi.biBitCount      = 32;
bmi.biCompression   = BI_RGB;
 
fp = fopen( "ss.bmp", "wb+" );
 
fwrite( &bfh, sizeof( BITMAPFILEHEADER ), 1, fp );
fwrite( &bmi, sizeof( BITMAPINFOHEADER ), 1, fp );
fwrite( p, w * h * 4, 1, fp );
 
fclose( fp );
}
 
 
//====================================================
//====================================================
int main()
{
HDC                 hdc;
HBITMAP             dib;
BITMAPINFOHEADER    bi;
 
w = GetSystemMetrics( SM_CXSCREEN );
h = GetSystemMetrics( SM_CYSCREEN );
 
bi.biSize           = sizeof( BITMAPINFOHEADER );
bi.biWidth          = w;
bi.biHeight         = h;
bi.biPlanes         = 1;
bi.biBitCount       = 32;
bi.biCompression    = BI_RGB;
hdc = CreateCompatibleDC( NULL );
dib = CreateDIBSection( hdc, (BITMAPINFO *)&bi, DIB_RGB_COLORS, (void **)&p, NULL, 0 );
SelectObject( hdc, dib );
 
BitBlt( hdc, 0, 0, w, h, GetDC( NULL ), 0, 0, SRCCOPY );
 
dump_bmp();
 
return 0;
}
Добавлено через 44 минуты
Весь экран, тридцать раз в секунду делать не будет.
Двенадцать - пятнадцать.
3
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
18.05.2022, 14:37
Как насчёт https://developer.nvidia.com/capture-sdk
Можно предположить, что NVidia разбирается в вопросе получше, чем обычные пользователи WinAPi
0
 Аватар для Наталья8
518 / 368 / 65
Регистрация: 09.03.2016
Сообщений: 3,890
18.05.2022, 15:43
Может быть он с игры захватывать будет?
https://www.cyberforum.ru/atta... 1652877782
Миниатюры
Максимально быстрый скриншот  
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
18.05.2022, 15:51
Наталья8, и что ему помешает в Capture SDK?
0
 Аватар для Наталья8
518 / 368 / 65
Регистрация: 09.03.2016
Сообщений: 3,890
18.05.2022, 17:55
https://www.cyberforum.ru/atta... 1652885724
Вложения
Тип файла: mp4 рррррр.mp4 (286.4 Кб, 31 просмотров)
0
place status here
 Аватар для gunslinger
3186 / 2220 / 640
Регистрация: 20.07.2013
Сообщений: 6,010
18.05.2022, 22:15
В билдере я давно примерно так делал (активное окно):
C++
1
2
3
4
5
6
      tagRECT lprect;
      GetWindowRect(GetForegroundWindow(), &lprect);
      Bitmap->Width = Min(Int(lprect.right), Int(Screen->Width)) - Max(Int(lprect.left), Int(0));
      Bitmap->Height = Min(Int(lprect.bottom), Int(Screen->Height)) - Max(Int(lprect.top), Int(0));
      BitBlt(Bitmap->Canvas->Handle,0,0,Bitmap->Width,Bitmap->Height,GetDC(0),Max(Int(lprect.left),Int(0)),Max(Int(lprect.top),Int(0)),SRCCOPY);
      Clipboard()->Assign(Bitmap);
Или так (весь экран):
C++
1
2
3
4
        Bitmap->Width = Screen->Width;
        Bitmap->Height = Screen->Height;
        BitBlt(Bitmap->Canvas->Handle,0,0,Screen->Width, Screen->Height,GetDC(0),0,0,SRCCOPY);
        Clipboard()->Assign(Bitmap);
Ясное дело, в общем случае (для всяких "хитрых" игр) скорей всего работать не будет.
0
place status here
 Аватар для gunslinger
3186 / 2220 / 640
Регистрация: 20.07.2013
Сообщений: 6,010
18.05.2022, 22:28
Пример:
0
 Аватар для Vitalik-2007
1 / 1 / 0
Регистрация: 27.05.2021
Сообщений: 97
18.05.2022, 23:57  [ТС]
Цитата Сообщение от Наталья8 Посмотреть сообщение
Весь экран, тридцать раз в секунду делать не будет.
Двенадцать - пятнадцать
Ясно, а можно скриншотить через пиксель? Тогда развер уменшается в 4 раза.
0
Нарушающий
417 / 305 / 46
Регистрация: 13.04.2022
Сообщений: 1,759
19.05.2022, 00:10
Вы хотите сами написать программу записи/транслации видео с экрана, потому что вы испробовали существующие, и они вас не устраивают?

Цитата Сообщение от Vitalik-2007 Посмотреть сообщение
Ясно, а можно скриншотить через пиксель? Тогда развер уменшается в 4 раза.
Напишите H.265 кодировщик, он позволяет сэкономить огромное количество бит для такой задачи.

Еще почитайте про WPP, это механизм через который винда договаривается с монитором о защите копирайтного видео.
1
 Аватар для Vitalik-2007
1 / 1 / 0
Регистрация: 27.05.2021
Сообщений: 97
19.05.2022, 00:14  [ТС]
Цитата Сообщение от QueryMonkey Посмотреть сообщение
Вы хотите сами написать программу записи/транслации видео с экрана, потому что вы испробовали существующие, и они вас не устраивают?
Я делаю типо урощенного teamviewer.
Цитата Сообщение от QueryMonkey Посмотреть сообщение
Напишите H.265 кодировщик
Я первый раз слышу что такое существует. Почитаю о нем и о WPP. Большое спасибо Вам!
0
Нарушающий
417 / 305 / 46
Регистрация: 13.04.2022
Сообщений: 1,759
19.05.2022, 00:18
Vitalik-2007, посмотрите VNC. у него есть исходники. этот велосипед изобретали много раз.
1
 Аватар для Vitalik-2007
1 / 1 / 0
Регистрация: 27.05.2021
Сообщений: 97
19.05.2022, 00:20  [ТС]
Цитата Сообщение от QueryMonkey Посмотреть сообщение
посмотрите VNC
хорошо, спасибо Вам
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
19.05.2022, 13:19
Цитата Сообщение от Vitalik-2007 Посмотреть сообщение
Я делаю типо урощенного teamviewer.
есть подозрение, что вы хотите кулхацкерством заняться.
Следующая тема будет "как сделать, чтобы приложения не было видно в системном трее и панели задач"
Следующая тема будет "как сделать, чтобы приложения не было видно в диспетчере задач"
Следующая тема будет "как сделать, чтобы приложение коннектилось к удалённому компу в обход брандмаузера"
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.05.2022, 13:19
Помогаю со студенческими работами здесь

Хочу максимально усложнить скриншот экрана
&lt;script&gt; function copyToClipboard() { var aux = document.createElement(&quot;input&quot;); aux.setAttribute(&quot;value&quot;, &quot;скриншот...

Быстрый поиск максимально похожего слова
Добрый день! Есть словарь строк List&lt;string&gt;, отсортированный по алфавиту. Есть некое слово, которого нет в словаре. Необходимо...

Максимально быстрый способ добавления миллионов объектов в коллекцию
Всем привет. Собственно имеем объекты содержащие два поля long, double; таких объектов свыше 50_000_000. на данный момент такой объем...

Хочу собрать максимально быстрый конфиг, бюджет ограничен (3500грн-4500грн)
Добрый вечер.хочу собрать пк,знаю что собрать что-то крутое не получится,но хочу чтоб было все максимальное по минимальным ценам и...

Как в Excel организовать максимально быстрый поиск среди миллиона значений ?
Пришлось делать поиск на листе Экселя. Однако записей там около миллиона и данные в четырёх столбцах. Функция Find работает медленно,...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru