Я пытаюсь воспроизвести существующий файл 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);
Похоже, ваша вышеупомянутая строка создает проблему. HeaderSize 256 пока что не может быть правдой. Правильный способ выяснить это:
int length = GetEnhMetaFileHeader(hEMf,0,NULL);
GetEnhMetaFileHeader(hEmf, length, &emfHeader);
ИЛИ ЖЕ
GetEnhMetaFileHeader(hEmf, sizeof(ENHMETAHEADER), &emfHeader);
Вы можете ссылаться на следующую ссылку, которая подробно описывает эту концепцию.
Других решений пока нет …