Результатом CreateEnhMetaFile и PlayEnhMetaFile в пустой документ 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

Решение

GetEnhMetaFileHeader(hEmf, 256, &emfHeader);

Похоже, ваша вышеупомянутая строка создает проблему. HeaderSize 256 пока что не может быть правдой. Правильный способ выяснить это:

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

ИЛИ ЖЕ

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

Вы можете ссылаться на следующую ссылку, которая подробно описывает эту концепцию.

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

1

Другие решения

Других решений пока нет …