将桌面截图捕获为矢量图像,并使用MFC放置到剪贴板中

时间:2018-12-17 09:07:18

标签: mfc

我正在开发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);

但是我正在寻找类似的代码,使我可以捕获屏幕快照作为矢量图像并放入剪贴板;因此,我可以从剪贴板读取为EMF。 我尝试搜索MFC函数以将光栅图像转换为剪贴板中的矢量图像,但没有发现任何有用的东西。

1 个答案:

答案 0 :(得分:2)

不能。屏幕截图仅收集像素数据。这些像素如何生成的所有信息(本质上就是EMF将存储的信息)都丢失了。无法恢复为构建最终映像而发出的GDI调用。

即使有可能,EMF也将无法代表GDI不能生成的图像数据的渲染信息(例如,具有OpenGL / Direct2D光栅化器的Qt应用程序,WPF应用程序或UWP应用程序)。