Как нарисовать прямоугольники на рабочем столе? [закрыто] ⇐ C++
Как нарисовать прямоугольники на рабочем столе? [закрыто]
Мой вопрос: можете ли вы рисовать на рабочем столе, используя cv::rectangle или cv::text? Я попробовал сделать снимок экрана, а затем нарисовать на нем, но, к сожалению, не получилось. Есть ли способ?
cv::Mat capture(HWND hwnd) { // код захвата экрана, адаптированный из https://stackoverflow.com/questions/344 ... op-capture HDC hwindowDC, hwindowCompatibleDC; int высота, ширина, ширина, ширина; HBITMAP hbокно; резюме::Mat SRC; БИТМАПИНФОХЕДЕР би; hwindowDC = GetDC(hwnd); hwindowCompatibleDC = CreateCompatibleDC(hwindowDC); SetStretchBltMode(hwindowCompatibleDC, COLORONCOLOR); //Размер окна RECT; // получаем высоту и ширину экрана //GetClientRect(hwnd, &windowsize); srcheight = SM_CYSCREEN; исходная ширина = SM_CXSCREEN; высота = 400; // измените это на любой размер, который вы хотите изменить ширина = 400; src.create(высота, ширина, CV_8UC4); // создаем растровое изображение hbwindow = CreateCompatibleBitmap (hwindowDC, ширина, высота); bi.biSize = sizeof(BITMAPINFOHEADER); // http://msdn.microsoft.com/en-us/library ... 85%29.aspx bi.biWidth = ширина; bi.biHeight = -высота; //это линия, которая заставляет ее рисовать вверх тормашками или нет bi.biPlanes = 1; bi.biBitCount = 32; bi.biCompression = BI_RGB; bi.biSizeImage = 0; bi.biXPelsPerMeter = 0; bi.biYPelsPerMeter = 0; bi.biClrUsed = 0; bi.biClrImportant = 0; // используем ранее созданный контекст устройства с растровым изображением SelectObject(hwindowCompatibleDC, hbwindow); // копируем из контекста оконного устройства в контекст растрового устройства StretchBlt(hwindowCompatibleDC, 0, 0, ширина, высота, hwindowDC, 760, 340, srcwidth, srcheight, SRCCOPY); //изменяем SRCCOPY на NOTSRCCOPY для дурацких цветов! GetDIBits(hwindowCompatibleDC, hbwindow, 0, высота, src.data, (BITMAPINFO*)&bi, DIB_RGB_COLORS); // копируем из hwindowCompatibleDC в hbwindow // избежать утечки памяти УдалитьОбъект (hbwindow); УдалитьDC (hwindowCompatibleDC); ReleaseDC(hwnd, hwindowDC); вернуть источник; } auto cap = capture(0); cv::rectangle(cap, cv::Point(760, 340), cv::Point(1160, 740), cv::Scalar(0, 0, 255), -1);
Это то, что я пробовал. Может быть есть какой-нибудь другой способ, который я пропустил? Заранее спасибо!
Мой вопрос: можете ли вы рисовать на рабочем столе, используя cv::rectangle или cv::text? Я попробовал сделать снимок экрана, а затем нарисовать на нем, но, к сожалению, не получилось. Есть ли способ?
cv::Mat capture(HWND hwnd) { // код захвата экрана, адаптированный из https://stackoverflow.com/questions/344 ... op-capture HDC hwindowDC, hwindowCompatibleDC; int высота, ширина, ширина, ширина; HBITMAP hbокно; резюме::Mat SRC; БИТМАПИНФОХЕДЕР би; hwindowDC = GetDC(hwnd); hwindowCompatibleDC = CreateCompatibleDC(hwindowDC); SetStretchBltMode(hwindowCompatibleDC, COLORONCOLOR); //Размер окна RECT; // получаем высоту и ширину экрана //GetClientRect(hwnd, &windowsize); srcheight = SM_CYSCREEN; исходная ширина = SM_CXSCREEN; высота = 400; // измените это на любой размер, который вы хотите изменить ширина = 400; src.create(высота, ширина, CV_8UC4); // создаем растровое изображение hbwindow = CreateCompatibleBitmap (hwindowDC, ширина, высота); bi.biSize = sizeof(BITMAPINFOHEADER); // http://msdn.microsoft.com/en-us/library ... 85%29.aspx bi.biWidth = ширина; bi.biHeight = -высота; //это линия, которая заставляет ее рисовать вверх тормашками или нет bi.biPlanes = 1; bi.biBitCount = 32; bi.biCompression = BI_RGB; bi.biSizeImage = 0; bi.biXPelsPerMeter = 0; bi.biYPelsPerMeter = 0; bi.biClrUsed = 0; bi.biClrImportant = 0; // используем ранее созданный контекст устройства с растровым изображением SelectObject(hwindowCompatibleDC, hbwindow); // копируем из контекста оконного устройства в контекст растрового устройства StretchBlt(hwindowCompatibleDC, 0, 0, ширина, высота, hwindowDC, 760, 340, srcwidth, srcheight, SRCCOPY); //изменяем SRCCOPY на NOTSRCCOPY для дурацких цветов! GetDIBits(hwindowCompatibleDC, hbwindow, 0, высота, src.data, (BITMAPINFO*)&bi, DIB_RGB_COLORS); // копируем из hwindowCompatibleDC в hbwindow // избежать утечки памяти УдалитьОбъект (hbwindow); УдалитьDC (hwindowCompatibleDC); ReleaseDC(hwnd, hwindowDC); вернуть источник; } auto cap = capture(0); cv::rectangle(cap, cv::Point(760, 340), cv::Point(1160, 740), cv::Scalar(0, 0, 255), -1);
Это то, что я пробовал. Может быть есть какой-нибудь другой способ, который я пропустил? Заранее спасибо!
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Я создаю код для создания файла прямо на рабочем столе; это безопасно? [закрыто]
Anonymous » » в форуме Python - 0 Ответы
- 23 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Маржа для предмет Div Не работает над мобильным видом, а работает на рабочем столе [закрыто]
Anonymous » » в форуме Html - 0 Ответы
- 3 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Маржа для предмет Div Не работает над мобильным видом, а работает на рабочем столе [закрыто]
Anonymous » » в форуме CSS - 0 Ответы
- 3 Просмотры
-
Последнее сообщение Anonymous
-