Сделайте снимок рабочего стола в виде векторного изображения и поместите в буфер обмена с помощью MFC - PullRequest
0 голосов
/ 17 декабря 2018

Я занимаюсь разработкой приложения MFC, в котором мне нужно захватить рабочий стол и сохранить его как векторное изображение.

Я могу сделать снимок экрана как .BMP и записать его в буфер обмена с помощью следующего кода.

int nScreenWidth = GetSystemMetrics(SM_CXSCREEN);
int nScreenHeight = GetSystemMetrics(SM_CYSCREEN);
HDC hDesktopDC = GetDC(NULL);
HDC hCaptureDC = CreateCompatibleDC(hDesktopDC);
HBITMAP hCaptureBitmap =CreateCompatibleBitmap(hDesktopDC,
                        nScreenWidth, nScreenHeight);
HGDIOBJ old_obj = SelectObject(hCaptureDC,hCaptureBitmap);
BitBlt(hCaptureDC,0,0,nScreenWidth,nScreenHeight,
       hDesktopDC,0,0,SRCCOPY|CAPTUREBLT);

// save bitmap to clipboard
OpenClipboard(NULL);
EmptyClipboard();
SetClipboardData(CF_BITMAP, hCaptureBitmap);
CloseClipboard();

// clean up
SelectObject(hCaptureDC, old_obj);
DeleteDC(hCaptureDC);
ReleaseDC(NULL, hDesktopDC);
DeleteObject(hCaptureBitmap);

Но я ищу нечто похожее, что позволило бы мне сделать снимок экрана в виде векторного изображения и поместить в буфер обмена ;Итак, я могу читать как ЭДС из буфера обмена.Я попытался выполнить поиск функций MFC для преобразования растровых изображений в векторные изображения из буфера обмена, но ничего полезного не нашел.

1 Ответ

0 голосов
/ 17 декабря 2018

Вы не можете.Скриншот собирает только данные пикселей.Вся информация о том, как были сгенерированы эти пиксели (что, по сути, должно было бы хранить EMF), теряется.Невозможно восстановить вызовы GDI, выданные для построения окончательного изображения.

Даже если бы это было возможно, EMF не была бы способна представлять информацию рендеринга для данных изображения, которые не создаются GDI (например, Qtприложения с растеризатором OpenGL / Direct2D, приложения WPF или приложения UWP).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...