GetMetaFileBitsEx Windowsメタファイルデータを取得

Cの宣言:

UINT GetMetaFileBitsEx(
	HMETAFILE hWmf,
	UINT ByteArraySize,
	LPVOID ByteArray);

VBの宣言:

Declare Function GetMetaFileBitsEx Lib "gdi32" ( _
	ByVal hWmf As Long, _
	ByVal ByteArraySize As Long, _
	ByRef ByteArray As Byte) As Long

説明:

hWmfで指定されたWindowsメタファイルの生のデータを取得する。

引数の意味は以下の通り。
hWmf 取得元のWindowsメタファイルのハンドル。
ByteArraySize ByteArrayのサイズ。
ByteArray 取得結果のデータ。NULLを指定可能。

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

VBのサンプル:

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

    Dim hWinMetaFile 'Windowsメタファイルのハンドル
    Dim hMemEnhMetaFile 'メモリ上の拡張メタファイルのハンドル
    Dim hFileEnhMetaFile 'ファイル上の拡張メタファイルのハンドル
    Dim Buf(10000) As Byte 'Windowsメタファイルデータの取得バッファ
    Dim BufSize As Long 'Bufに格納されたデータのサイズ
    Dim Pict As METAFILEPICT

    'Windowsメタファイルのオープン
    hWinMetaFile = GetMetaFile("c:\pic\test.wmf")
    
    'メタファイルデータの取得
    BufSize = GetMetaFileBitsEx(hWinMetaFile, 10000, Buf(0))
    
    '拡張メタファイルを作成
    Pict.mm = MM_TEXT
    Pict.xExt = 300
    Pict.yExt = 300
    Pict.hMF = hWinMetaFile
    
    hMemEnhMetaFile = SetWinMetaFileBits(BufSize, Buf(0), Me.hDC, Pict)

    'ファイルに保存
    hFileEnhMetaFile = CopyEnhMetaFile(hMemEnhMetaFile, "c:\pic\test.emf")

    'メタファイルのクローズ
    DeleteEnhMetaFile hFileEnhMetaFile
    DeleteEnhMetaFile hMemEnhMetaFile
    DeleteMetaFile hWinMetaFile

End Sub


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

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