Metafile::EmfToWmfBits 方法 (gdiplusheaders.h)

将增强格式图元文件转换为 Windows 图元文件格式 (WMF) 图元文件,并将转换后的记录存储在指定的缓冲区中。

语法

UINT EmfToWmfBits(
  [in]           HENHMETAFILE hemf,
  [in]           UINT         cbData16,
  [out]          LPBYTE       pData16,
  [in, optional] INT          iMapMode,
  [in, optional] INT          eFlags
);

parameters

[in] hemf

类型: HENHMETAFILE

要转换的增强格式图元文件的句柄。

[in] cbData16

类型: UINT

无符号整数,指定 pData16 参数指向的缓冲区中的字节数。

[out] pData16

类型: LPBYTE

指向接收转换的记录的缓冲区的指针。 如果 pData16NULL则 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
标头 gdiplusheaders.h (包括 Gdiplus.h)
Library Gdiplus.lib
DLL Gdiplus.dll

另请参阅

EmfType

GetWinMetaFileBits

Metafile

图元文件