我正在尝试将现有的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);
答案 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);
您可能希望详细介绍以下描述此概念的链接。