CreateEnhMetaFile和PlayEnhMetaFile导致空白的EMF文档

时间:2014-04-07 14:21:37

标签: c++ gdi emf

我正在尝试将现有的EMF文件重播到另一个EMF文件并更改一些记录。对于初学者我想将整个文档重播到另一个文档,但结果文档是空白的,分辨率比原始文档小得多。

HENHMETAFILE hEmf = GetEnhMetaFile(_T("test.emf"));

ENHMETAHEADER emfHeader;
GetEnhMetaFileHeader(hEmf, 256, &emfHeader);

RECT rcFrame;
memcpy(&rcFrame, &emfHeader.rclFrame, sizeof(RECT));

HDC compressedEmf = CreateEnhMetaFile(NULL, _T("compressed.emf"), &rcFrame, NULL);
PlayEnhMetaFile(compressedEmf, hEmf, &rcFrame);


HENHMETAFILE tmpEMF =  CloseEnhMetaFile(compressedEmf);
DeleteEnhMetaFile(tmpEMF);

1 个答案:

答案 0 :(得分:1)

GetEnhMetaFileHeader(hEmf, 256, &emfHeader);

您的上述行似乎正在创建问题。您已假设 headerize 是256个bye,这可能不是真的。找到它的正确方法是:

int  length = GetEnhMetaFileHeader(hEMf,0,NULL);
GetEnhMetaFileHeader(hEmf, length, &emfHeader);

OR

GetEnhMetaFileHeader(hEmf, sizeof(ENHMETAHEADER), &emfHeader);

您可能希望详细介绍以下描述此概念的链接。

http://aranna.altervista.org/data/ch18c.html