@steve
В C++ нет нативных функций для создания скриншотов, так как язык предназначен для работы с программированием и не имеет возможности взаимодействовать с графическим интерфейсом операционной системы напрямую.
Однако, есть несколько путей для создания скриншотов в C++:
Ниже приведен пример кода для создания скриншота с использованием библиотеки OpenCV:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#include <opencv2/opencv.hpp> int main() { // Создание объекта для хранения изображения cv::Mat screenshot; // Захват скриншота и сохранение его в объекте изображения cv::VideoCapture cap(0); cap >> screenshot; // Сохранение скриншота в файл cv::imwrite("screenshot.png", screenshot); return 0; } |
Обратите внимание, что в этом примере используется библиотека OpenCV, поэтому вам потребуется установить ее и настроить проект для работы с ней.
@steve
Вот пример кода для создания скриншота на Windows с использованием WinAPI:
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 |
#include <windows.h> int main() { // Получение хэндла рабочего стола HDC hDC = GetDC(NULL); // Создание битмапа с размерами экрана int width = GetDeviceCaps(hDC, HORZRES); int height = GetDeviceCaps(hDC, VERTRES); HBITMAP hBitmap = CreateCompatibleBitmap(hDC, width, height); // Создание DC для битмапа и копирование экрана в битмап HDC memDC = CreateCompatibleDC(hDC); HGDIOBJ oldBitmap = SelectObject(memDC, hBitmap); BitBlt(memDC, 0, 0, width, height, hDC, 0, 0, SRCCOPY); // Сохранение битмапа в файл PBITMAPINFOHEADER pbih = (PBITMAPINFOHEADER)GlobalAlloc(GHND, sizeof(BITMAPINFOHEADER)); // Установка параметров изображения pbih->biSize = sizeof(BITMAPINFOHEADER); pbih->biWidth = width; pbih->biHeight = height; pbih->biPlanes = 1; pbih->biBitCount = 24; pbih->biCompression = BI_RGB; pbih->biSizeImage = 0; pbih->biXPelsPerMeter = 0; pbih->biYPelsPerMeter = 0; pbih->biClrUsed = 0; pbih->biClrImportant = 0; HANDLE hFile = CreateFile("screenshot.bmp", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); BITMAPFILEHEADER hdr; hdr.bfType = 0x4d42; hdr.bfSize = (DWORD)(sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + width * height * 3); hdr.bfReserved1 = 0; hdr.bfReserved2 = 0; hdr.bfOffBits = (DWORD)sizeof(BITMAPFILEHEADER) + (DWORD)sizeof(BITMAPINFOHEADER); DWORD dwTemp; WriteFile(hFile, &hdr, sizeof(BITMAPFILEHEADER), &dwTemp, NULL); WriteFile(hFile, pbih, sizeof(BITMAPINFOHEADER), &dwTemp, NULL); DWORD cb = (width * 3 + 3) / 4 * 4 * height; WriteFile(hFile, hBitmap, cb, &dwTemp, NULL); CloseHandle(hFile); // Освобождение ресурсов GlobalFree(pbih); SelectObject(memDC, oldBitmap); DeleteDC(memDC); ReleaseDC(NULL, hDC); DeleteObject(hBitmap); return 0; } |
Этот код использует функции WinAPI для создания скриншота и сохранения его в битмап файле "screenshot.bmp". Помните, что WinAPI работает только на Windows, поэтому он не будет работать на других операционных системах.