CreateEnhMetaFile 和 PlayEnhMetaFile 会导致空白 EMF 文档

CreateEnhMetaFile and PlayEnhMetaFile result in blank EMF document

本文关键字:空白 EMF 文档 PlayEnhMetaFile CreateEnhMetaFile      更新时间:2023-10-16

我正在尝试将现有的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);
GetEnhMetaFileHeader(hEmf, 256, &emfHeader);

您的上述行似乎正在制造问题。在这里,您假设您的标头大小为 256 bye,这可能不正确。找出它的正确方法是:

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

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

您可能需要参考以下链接,其中详细描述了此概念。

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