С Новым годом! Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
0 / 0 / 0
Регистрация: 25.07.2020
Сообщений: 150

Самый быстрый способ получить скрин экрана c++

16.05.2021, 17:55. Показов 3113. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет, вопрос в шапке. Не особо разбираюсь в этих темах. Что будет самое эффективное? Что быстрее GDI windows или DirectX? И от чего меньше нагрузки?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.05.2021, 17:55
Ответы с готовыми решениями:

Самый быстрый способ решения задачи a+b
несколько раз ходил на олимпиады, во многих из них в пробном туре даётся задача а+б, решаю её стандартным способом: cin >> a...

Самый быстрый способ передать числа в поток
Добрый вечер, форумчане. Спрошу на удачу, может кто съел уже собаку на этом. 1) Есть главный и дополнительный поток 2)...

Самый быстрый способ дополнить вектор массивом
есть вектор заполненный нулями: vector<int> v(100000); есть большой массив: int ar; for (int i = 0; i < 100000;...

8
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
16.05.2021, 21:22
Цитата Сообщение от Dhdbdb Посмотреть сообщение
Всем привет, вопрос в шапке. Не особо разбираюсь в этих темах. Что будет самое эффективное? Что быстрее GDI windows или DirectX? И от чего меньше нагрузки?
Без разницы
0
0 / 0 / 0
Регистрация: 25.07.2020
Сообщений: 150
16.05.2021, 21:37  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Без разницы
я читал на форумах, что gdi больше нагрузки дает
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
16.05.2021, 21:41
Цитата Сообщение от Dhdbdb Посмотреть сообщение
я читал на форумах, что gdi больше нагрузки дает
Ты, для начала, сделай хоть как-нибудь. Чтоб хотя бы проблематику понять. А то форумы долго можно читать.
0
0 / 0 / 0
Регистрация: 25.07.2020
Сообщений: 150
16.05.2021, 21:52  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Ты, для начала, сделай хоть как-нибудь. Чтоб хотя бы проблематику понять. А то форумы долго можно читать.
Да не знаю, что делать, у меня с gui получается в среднем 15 кадров в секунду, юзал directx, только 3 кадра в секунду. На форумах писали, что directx работает быстрее
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
16.05.2021, 21:59
Цитата Сообщение от Dhdbdb Посмотреть сообщение
Да не знаю, что делать, у меня с gui получается в среднем 15 кадров в секунду, юзал directx, только 3 кадра в секунду. На форумах писали, что directx работает быстрее
Насколько мне известно, там ещё и сохранять надо в файл. Покажи, как ты снимал через directx
0
0 / 0 / 0
Регистрация: 25.07.2020
Сообщений: 150
16.05.2021, 22:07  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Насколько мне известно, там ещё и сохранять надо в файл. Покажи, как ты снимал через directx
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
HRESULT Direct3D9TakeScreenshots(UINT adapter, UINT count)
  {
    HRESULT hr = S_OK;
    IDirect3D9 *d3d = nullptr;
    IDirect3DDevice9 *device = nullptr;
    IDirect3DSurface9 *surface = nullptr;
    D3DPRESENT_PARAMETERS parameters = { 0 };
    D3DDISPLAYMODE mode;
    D3DLOCKED_RECT rc;
    UINT pitch;
    SYSTEMTIME st;
    LPBYTE *shots = nullptr;
 
    // init D3D and get screen size
    d3d = Direct3DCreate9(D3D_SDK_VERSION);
    HRCHECK(d3d->GetAdapterDisplayMode(adapter, &mode));
 
    parameters.Windowed = TRUE;
    parameters.BackBufferCount = 1;
    parameters.BackBufferHeight = mode.Height;
    parameters.BackBufferWidth = mode.Width;
    parameters.SwapEffect = D3DSWAPEFFECT_DISCARD;
    parameters.hDeviceWindow = NULL;
 
    // create device & capture surface
    HRCHECK(d3d->CreateDevice(adapter, D3DDEVTYPE_HAL, NULL, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &parameters, &device));
    HRCHECK(device->CreateOffscreenPlainSurface(mode.Width, mode.Height, D3DFMT_A8R8G8B8, D3DPOOL_SYSTEMMEM, &surface, nullptr));
 
    // compute the required buffer size
    HRCHECK(surface->LockRect(&rc, NULL, 0));
    pitch = rc.Pitch;
    HRCHECK(surface->UnlockRect());
 
    // allocate screenshots buffers
    shots = new LPBYTE[count];
    for (UINT i = 0; i < count; i++)
    {
      shots[i] = new BYTE[pitch * mode.Height];
    }
 
    GetSystemTime(&st); // measure the time we spend doing <count> captures
    wprintf(L"%i:%i:%i.%i\n", st.wHour, st.wMinute, st.wSecond, st.wMilliseconds);
    for (UINT i = 0; i < count; i++)
    {
      // get the data
      HRCHECK(device->GetFrontBufferData(0, surface));
 
      // copy it into our buffers
      HRCHECK(surface->LockRect(&rc, NULL, 0));
      CopyMemory(shots[i], rc.pBits, rc.Pitch * mode.Height);
      HRCHECK(surface->UnlockRect());
    }
    GetSystemTime(&st);
    wprintf(L"%i:%i:%i.%i\n", st.wHour, st.wMinute, st.wSecond, st.wMilliseconds);
 
    // save all screenshots
    for (UINT i = 0; i < count; i++)
    {
      WCHAR file[100];
      wsprintf(file, L"cap%i.png", i);
      HRCHECK(SavePixelsToFile32bppPBGRA(mode.Width, mode.Height, pitch, shots[i], file, GUID_ContainerFormatPng));
    }
 
  cleanup:
    if (shots != nullptr)
    {
      for (UINT i = 0; i < count; i++)
      {
        delete shots[i];
      }
      delete[] shots;
    }
    RELEASE(surface);
    RELEASE(device);
    RELEASE(d3d);
    return hr;
  }
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
16.05.2021, 22:14
Цитата Сообщение от Dhdbdb Посмотреть сообщение
wsprintf(file, L"cap%i.png", i);
      HRCHECK(SavePixelsToFile32bppPBGRA(mode. Width, mode.Height, pitch, shots[i], file, GUID_ContainerFormatPng));
Стопудово, из-за этого и тормозит. Я так понимаю, ты вот отсюда скопировал - https://stackoverflow.com/ques... ng-directx. Там SavePixelsToFile32bppPBGRA не слишком оптимально выглядит.

А покажи, как ты делал через GDI?
0
0 / 0 / 0
Регистрация: 25.07.2020
Сообщений: 150
16.05.2021, 22:22  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Стопудово, из-за этого и тормозит.
Не, я это вырезал в 42 строке мне выводит время, а в 54 строке выводит тоже время, разница в 400 миллисекундах.
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Я так понимаю, ты вот отсюда скопировал - https://stackoverflow.com/ques... ng-directx.
Нет от сюда - https://askdev.ru/q/zahvat-ekr... tx-311783/
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
А покажи, как ты делал через GDI?
Да там по стандарту чере BitBit

Добавлено через 38 секунд
Да меня интересует, почему так медленно через DirectX работает
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.05.2021, 22:22
Помогаю со студенческими работами здесь

Какой самый быстрый способ решения СЛАУ?
Доброго дня. Помогите выбрать СЛАУ(системы линейных алгебраических уравнений), которым СЛАУ будет решаться компьютером быстрее всего

Memory shift или самый быстрый способ перемещения блока памяти
int* dataField = new int{0}; for (int i = 0; i &lt; 50; i++) dataField = 777; //тут должен быть memory shift delete dataField;...

Самый быстрый способ посчитать сумма элементов матрицы, находящихся в матрице
Здравствуйте форумчане! Подскажите мне самый быстрый способ нахождении суммы элементов матрицы, находящихся на главной диагонали...

Считать квадратную матрицу. Какой самый быстрый способ это сделать?
Какие самые быстрые способы считывания в с++? Пример : мне надо считать квадратную матрицу. Какой самый быстрый способ это сделать?

Каков самый быстрый способ узнать количество строк в оргомном текстовом файле в Windows?
Есть текстовый файл с кучей строк (размер файла ~ 1Гб). Как можно максимально быстро узнать кол-во строк в этом файле? Если делать тупо...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru