我是C++和OpenGL的新手。有人曾经写过这个C++应用程序(基于Linux),我必须调整它。将CDC窗口的内容导出到EMF文件
基本上在这个应用程序中,有一个包含图的窗口。现在这个窗口支持将图输出到位图(tga,jpg和bmp)的功能。我们想添加另一个功能来将剧情的内容保存为增强元文件。
我设法得到CDC设备处理程序,并使用它的HDC创建一个空的EMF,其宽度/高度与绘图相同,但是我不知道如何将绘图的CONTENT迁移到EMF文件。有没有任何代码可以做到这一点?
我用来创建空的EMF文件的代码如下。不要理解任何想法或帮助!
CDC* dc = pWnd->GetDC();
HDC hdcRef;
hdcRef = dc->GetSafeHdc();
CRect rect;
pWnd->GetClientRect(rect);
// Convert client coordinates to .01-mm units.
// Use iWidthMM, iWidthPels, iHeightMM, and
int iWidthMM = GetDeviceCaps (hdcRef, HORZSIZE);
int iHeightMM = GetDeviceCaps (hdcRef, VERTSIZE);
int iWidthPels = GetDeviceCaps (hdcRef, HORZRES);
int iHeightPels = GetDeviceCaps (hdcRef, VERTRES);
rect.left = (rect.left * iWidthMM * 100)/iWidthPels;
rect.top = (rect.top * iHeightMM * 100)/iHeightPels;
rect.right = (rect.right * iWidthMM * 100)/iWidthPels;
rect.bottom = (rect.bottom * iHeightMM * 100)/iHeightPels;
//::SetMapMode(hdcRef, MM_HIMETRIC);
HDC hdcMeta = CreateEnhMetaFile(hdcRef, "C:\\temp\\testEMF.emf", &rect, "Example metafile\0");
if (!hdcMeta)
GenAppWarningMsg("CreateEnhMetaFile", "Error");
// Set the device context back to its original state.
SetMapMode(hdcMeta, MM_ANISOTROPIC);
::ReleaseDC(NULL, hdcRef);
HENHMETAFILE meta = CloseEnhMetaFile (hdcMeta);
要生成EMF,理想情况下,您不会保存位图,而是保存单个线条,点等,以生成绘图,以便可以高质量地渲染结果。 – Bryan