.EMF オプション番号
Enhanced Metafile Format (EMF) は、グラフィック イメージをデバイスに依存せずに保存します。 EMF のメタファイルは、任意の出力デバイスでの解析後に格納されたイメージをレンダリングできる時系列の可変長レコードで構成されます。これらの可変長レコードは、囲まれたオブジェクト、描画用のコマンド、およびイメージを正確にレンダリングするために重要なグラフィックス プロパティの定義である場合があります。デバイスが独自のグラフィック環境を使用して EMF メタファイルを開くと、元の画像の縦横比、寸法、色、およびその他のグラフィック プロパティは、開いているデバイス プラットフォームに関係なく同じままです。
簡単な歴史
1990 年に、Microsoft は Microsoft Windows 用のイメージ ファイル形式 Windows メタファイル (WMF) を設計しました。 Windows メタファイルは 16 ビット形式で、一部のビットマップ コンポーネントが含まれる場合があります。 1993 年、Win32/GDI は拡張メタファイル (EMF) を発表しました。これは、柔軟性とスケーラビリティが強化された新しいバージョンです。 EMF は、プリンタ ドライバを実行するためのグラフィック言語コマンドとしても使用されます。 Microsoft は現在、Windows 形式 (WMF) よりも強化されたメタファイル形式 (EMF) を推奨しています。 Windows XP が導入されたとき、Enhanced Metafile Format Plus (EMF+) バージョンがリリースされました。この新しいバージョンは、WMF/EMF レコードの GDI への呼び出しと同様に、GDI+ API 呼び出しをシリアル化することで道を見つけます。 EMZ として知られる EMF の gzip 圧縮バージョンが存在します。
EMF メタファイル形式
拡張メタファイル形式の必須要素は次のとおりです。
- EMR_HEADER (作成時の画像のバージョン、サイズ、解像度)
- GDI オブジェクトのテーブル
- 予約パレット (オプション)
- 配列構造に配置されたメタファイル レコード (プロパティ設定、定義済みオブジェクト、描画コマンド)
- EMR_EOF レコード (EMF メタファイルの最後のレコード)
EMF バージョン
- オリジナル: オリジナル バージョンは、元のイメージを保持し、デバイス非依存を維持するために必要なレコードを指定します。さらに、描画用のグラフィックス オブジェクトとコマンドを含むレコードをサポートします。
- バージョン 1: EMF の 2 番目のバージョンでは、ピクセル形式のレコードを追加し、OpenGL コマンドを使用できるようにすることで、柔軟性とデバイスの独立性が向上しました。
- バージョン 2: 3 番目のバージョンでは、デバイスの表面距離を測定するためのメートル法を追加することで精度が向上し、記録はよりスケーラブルになりました。
強化されたメタファイル レコード
メタファイルのレコードは、配列の形式で配置されます。これらのレコードは ENHMETARECORD 構造を持ち、長さが可変です。 ENHMETARECORD は、拡張メタファイル形式を使用して画像を作成するための GDI 関数を定義するデータを指定します。 ENHMETAHEADER 構造は、常にこの形式の最初のレコードです。この EMF ヘッダーには、次の情報が含まれています。
拡張メタファイルのすべてのレコードには、最初に EMR (基本構造を提供する) の 2 つのメンバーがあります。最初のメンバーは、iType として知られている、レコードのタイプを決定する GDI 関数 (パラメーターはレコードで使用されます) を認識します。もう 1 つのメンバー nSize は、各レコードのサイズを定義します。残りのパラメーター (存在する場合) と、nSize のすぐ下に配置された追加データ。ヘッダーの直後に、オプションのテキスト説明が表示される場合があります。そのテキストの説明には、写真と作者の名前が記録されています。存在がオプションであるパレットは、拡張メタファイルの作成で使用される色を指定します。画像作成に不可欠な GDI 関数を指定するために使用されるその他のレコード。
各メタファイルには、少なくとも 1 つの EMF レコードが存在する必要があります。あるレコードから別のレコードへのトラバース情報は EMF レコードに依存するため、これらのレコードは隣接して配置する必要があります。 EOF_record を除くメタファイル内の特定のレコードでは、その特定のレコードの長さが次のレコードに移動するように定義されます。
強化されたメタファイル作成
CreateEnhMetaFile 関数は、拡張メタファイルを作成するために使用されます。この関数の引数は、ディスク/メモリ上の画像の次元と保存に使用されます。さらに、この関数には、画像が最初に表示されたデバイス (参照デバイス) の次元と、参照デバイス (DC) のコンテキストが必要です。そのため、この DC を処理するための引数は、CreateEnhMetaFile 関数を呼び出すときに提供する必要があります。関数の構文は次のとおりです。
HDC CreateEnhMetaFileExample(
HDC hdc,
LPCSTR lptoFilename,
const OVAL *lprc,
LPCSTR lpDesc
);
HDC: 参照デバイスへのハンドル。
lptoFilename: ファイル名へのポインター。
lprc: 楕円形構造へのポインターは、写真の寸法を mm 単位で指定します。
lpDesc: 画像のタイトルと画像を作成したアプリケーション名の文字列へのポインター。
強化されたメタファイル操作
以下は、拡張メタファイルへのハンドルを使用して実行できるジョブです。
*保存された画像の表示と編集。
- 強化されたメタファイルのコピーを生成します。
- 強化されたメタファイルの EMF ヘッダー、オプションの説明、およびバイナリ バージョンのコピーを取得する
- パレットの色を要約します。
グラフィックオブジェクト
描画および描画操作では、オブジェクト作成レコードによってグラフィックス オブジェクトを作成し、後で使用するために保存できます。 EMR_SELECTOBJECT
レコードは、再生デバイス コンテキストを使用してこれらのグラフィック オブジェクトを取得できます。ペン、パレット、ブラシ、カラー スペース、フォント、およびストック オブジェクトは、再利用可能なオブジェクト タイプです。
バイト順
リトルエンディアン形式は、メタファイル レコードにデータを格納するために使用されます。
バージョニング
EMF ファイル形式は 2 回改訂されました。変更されたバージョンは、オリジナル、拡張 1、および拡張 2 です。拡張バージョンには、OpenGL レコードと、内部ピクセル形式のオプションの記述子が用意されています。表示される寸法にミリリットル単位の測定機能が追加されました。