Как нарисовать прямоугольники на рабочем столе? [закрыто]C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как нарисовать прямоугольники на рабочем столе? [закрыто]

Сообщение Anonymous »


Мой вопрос: можете ли вы рисовать на рабочем столе, используя 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);

Это то, что я пробовал. Может быть есть какой-нибудь другой способ, который я пропустил? Заранее спасибо!
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»