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

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

18.05.2022, 06:39. Показов 2373. Ответов 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
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 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
1359 / 857 / 366
Регистрация: 26.02.2015
Сообщений: 3,824
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
622 / 380 / 67
Регистрация: 09.03.2016
Сообщений: 4,110
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,536
Записей в блоге: 1
18.05.2022, 14:37
Как насчёт https://developer.nvidia.com/capture-sdk
Можно предположить, что NVidia разбирается в вопросе получше, чем обычные пользователи WinAPi
0
 Аватар для Наталья8
622 / 380 / 67
Регистрация: 09.03.2016
Сообщений: 4,110
18.05.2022, 15:43
Может быть он с игры захватывать будет?
https://www.cyberforum.ru/atta... 1652877782
Миниатюры
Максимально быстрый скриншот  
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,536
Записей в блоге: 1
18.05.2022, 15:51
Наталья8, и что ему помешает в Capture SDK?
0
 Аватар для Наталья8
622 / 380 / 67
Регистрация: 09.03.2016
Сообщений: 4,110
18.05.2022, 17:55
https://www.cyberforum.ru/atta... 1652885724
Вложения
Тип файла: mp4 рррррр.mp4 (286.4 Кб, 31 просмотров)
0
place status here
 Аватар для gunslinger
3190 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,023
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
3190 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,023
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,536
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru