GetWinMetaFileBits 拡張メタファイルデータをWindowsメタファイル形式でを取得

Cの宣言:

UINT GetWinMetaFileBits(
	HENHMETAFILE hEmf,
	UINT ByteArraySize,
	LPBYTE ByteArray,
	INT MapMode,
	HDC hDC);

VBの宣言:

Declare Function GetWinMetaFileBits Lib "gdi32" ( _
	ByVal hEmf As Long, _
	ByVal ByteArraySize As Long, _
	ByRef ByteArray As Byte, _
	ByVal MapMode As Long, _
	ByVal hDC As Long) As Long

説明:

拡張メタファイルの生のデータをWindowsメタファイルの形式で取得する。

引数の意味は以下の通り。
hEmf 取得元の拡張メタファイルのハンドル。
ByteArraySize ByteArrayのサイズ。
ByteArray 取得結果のデータ。NULLを指定可能。
MapMode 変換後のWindowsメタファイルのマッピングモード。
hDC 変換の際に解像度などを参照するために使用されるデバイスを示すデバイスコンテキストのハンドル。

戻り値は、ByteArrayに設定されたデータのサイズである。ByteArrayにNULLを指定した場合、必要なサイズが返される。関数の実行に失敗した場合、0が返される。

VBのサンプル:

"c:\pic\test.emf"という拡張メタファイルをWindowsメタファイルに変換し、"c:\pic\test.wmf"というファイルに保存する。
' 拡張メタファイルをWindowsメタファイルに変換
Private Sub Command1_Click()

    Dim hEnhMetaFile As Long '拡張メタファイルのハンドル
    Dim hMemWinMetaFile As Long 'メモリ上のWindowsメタファイルのハンドル
    Dim hFileWinMetaFile As Long 'ファイル上のWindowsメタファイルのハンドル
    Dim Buf(10000) As Byte 'Windowsメタファイルデータの取得バッファ
    Dim BufSize As Long 'Bufに格納されたデータのサイズ
    
    '拡張メタファイルのオープン
    hEnhMetaFile = GetEnhMetaFile("c:\pic\test.emf")
    
    'Windowsメタファイル形式でデータを取得
    BufSize = GetWinMetaFileBits(hEnhMetaFile, 10000, Buf(0), MM_TEXT, Me.hDC)
    
    'Windowsメタファイルの作成
    hMemWinMetaFile = SetMetaFileBitsEx(BufSize, Buf(0))
    
    'ファイルに保存
    hFileWinMetaFile = CopyMetaFile(hMemWinMetaFile, "c:\pic\test.wmf")
    
    'メタファイルのクローズ
    DeleteMetaFile hFileWinMetaFile
    DeleteMetaFile hMemWinMetaFile
    DeleteEnhMetaFile hEnhMetaFile

End Sub


(original text:2000/01/27 更新)

本ドキュメントの内容は保証しません。本ドキュメントによって生じた結果について、一切の責任を負いません。