@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, поэтому он не будет работать на других операционных системах.