Метод Metafile::EmfToWmfBits (gdiplusheaders.h)
Преобразует метафайл расширенного формата в метафайл Windows Metafile Format (WMF) и сохраняет преобразованные записи в указанном буфере.
Синтаксис
UINT EmfToWmfBits(
[in] HENHMETAFILE hemf,
[in] UINT cbData16,
[out] LPBYTE pData16,
[in, optional] INT iMapMode,
[in, optional] INT eFlags
);
Параметры
[in] hemf
Тип: HENHMETAFILE
Обработка метафайла расширенного формата, который требуется преобразовать.
[in] cbData16
Тип: UINT
Целое число без знака, указывающее количество байтов в буфере, на который указывает параметр pData16 .
[out] pData16
Тип: LPBYTE
Указатель на буфер, который получает преобразованные записи. Если pData16 имеет значение NULL, Metafile::EmfToWmfBits возвращает количество байтов, необходимых для хранения преобразованных записей метафайлов.
[in, optional] iMapMode
Тип: INT
Необязательный элемент. Указывает режим сопоставления для использования в преобразованном метафайле. Список возможных режимов сопоставления см. в разделе SetMapMode. Значение по умолчанию — MM_ANISOTROPIC.
[in, optional] eFlags
Тип: EmfToWmfBitsFlags
Необязательный элемент. Элемент перечисления EmfToWmfBitsFlags , указывающий параметры преобразования. Значение по умолчанию — EmfToWmfBitsFlagsDefault.
Возвращаемое значение
Тип: UINT
Если метод завершается успешно и указатель буфера имеет значение NULL, возвращаемое значение — это количество байтов, необходимых для хранения преобразованных записей. Если метод выполнен успешно, а указатель буфера является допустимым указателем, возвращаемое значение — это размер данных метафайла в байтах. Если метод завершается сбоем, возвращаемое значение равно нулю.
Комментарии
При вызове Metafile::EmfToWmfBits для определения размера требуемого буфера необходимо передать то же значение для eFlags , которое вы передаете позже при вызове Metafile::EmfToWmfBits для выполнения преобразования. В противном случае размер, возвращаемый при первом вызове Metafile::EmfToWmfBits , будет неправильным.
Этот метод не может преобразовать метафайлы типа EmfTypeEmfPlusOnly. Если этот метод используется для преобразования метафайла типа EmfTypeEmfPlusDual, записи расширенного метафайла (EMF) в этом метафайле преобразуются, но записи EMF+ не преобразуются.
Этот метод преобразует расширенный метафайл в метафайл WMF, чтобы его изображение можно было отобразить в приложении, которое распознает старый формат.
Метод Metafile::EmfToWmfBits не делает недействительным расширенный дескриптор метафайла. Вызовите функцию DeleteEnhMetaFile , чтобы освободить дескриптор, когда он больше не нужен.
Чтобы создать масштабируемый метафайл WMF, укажите MM_ANISOTROPIC в качестве параметра iMapMode .
Примеры
В следующем примере метафайл расширенного формата преобразуется в метафайл WMF. Последний параметр, переданный в Metafile::EmfToWmfBits , указывает, что метафайл расширенного формата внедряется в преобразованный метафайл в виде комментария.
// Construct a Metafile object from an existing EMF disk file.
Metafile myMetafile(L"SourceMetafile.emf");
// Get a handle to the EMF metafile.
HENHMETAFILE hEmf = myMetafile.GetHENHMETAFILE();
// Determine the size of the buffer that will receive the converted records.
UINT size = Metafile::EmfToWmfBits(
hEmf,
0,
NULL,
MM_ANISOTROPIC,
EmfToWmfBitsFlagsEmbedEmf);
// Allocate a buffer to receive the converted records.
BYTE* buffer = new BYTE[size];
// Convert the EMF records to WMF records.
INT convertedSize = Metafile::EmfToWmfBits(
hEmf,
size,
buffer,
MM_ANISOTROPIC,
EmfToWmfBitsFlagsEmbedEmf);
// Get a handle to the converted metafile.
HMETAFILE hmf = SetMetaFileBitsEx(size, buffer);
// Write the WMF metafile to a disk file.
CopyMetaFile(hmf, TEXT("ConvertedMetafile.wmf"));
DeleteMetaFile(hmf);
DeleteEnhMetaFile(hEmf);
delete[] buffer;
Требования
Минимальная версия клиента | Windows XP, Windows 2000 Professional [только классические приложения] |
Минимальная версия сервера | Windows 2000 Server [только классические приложения] |
Целевая платформа | Windows |
Header | gdiplusheaders.h (включая Gdiplus.h) |
Библиотека | Gdiplus.lib |
DLL | Gdiplus.dll |