3

Adobe Illustratorで作成されたEMFファイル(どのバージョンかはわかりませんが、初期スタイルのEMRヘッダーの1つがあります)はA4サイズであると想定されており、どのようになるかわかりません。ファイルには次のEMRレコードがあります。

U_EMRHEADER                   record:    0 type:  1 offset:       0 size:     116
   rclBounds:      {255,-925,1377,-132} 
   rclFrame:       {7969,-28906,43031,-4125}  **350.63 x 247.82 mm**
   dSignature:     0x464D4520
   nVersion:       0x00010000
   nBytes:         1924
   nRecords:       54
   nHandles:       4
   sReserved:      0
   nDescription:   13
   offDescription: 88
      Desc. A:  Adobe Systems
      Desc. B:  
   nPalEntries:    0
   szlDevice:      {1024,768} 
   szlMillimeters: {320,240} 
U_EMRSETMAPMODE               record:    1 type: 17 offset:     116 size:      12
   iMode:          0x00000008       **MM_ANISOTROPIC**
U_EMRSETWINDOWORGEX           record:    3 type: 10 offset:     140 size:      16
   ptlOrigin:      {0,0}
U_EMRSETVIEWPORTORGEX         record:    4 type: 12 offset:     156 size:      16
   ptlOrigin:      {0,0}
U_EMRSETWINDOWEXTEX           record:    5 type:  9 offset:     172 size:      16
   szlExtent:      {10104,7143}
U_EMRSETVIEWPORTEXTEX         record:    6 type: 11 offset:     188 size:      16
   szlExtent:      {3368,2381}

rclFrameフィールドは通常、ページサイズを設定しますが、A4は297 x 210 mmであり、350.63 x247.82mmではありません。ただし、350.63x247.82がA4の正しい比率です。これらの数値からA4サイズを調整できる唯一の方法は、rclFrame値をMM_HIENGLISHとして扱い、EMRSETWINDOWEXTEX/EMRSETVIEWPORTEXTEXの1/3スケール係数を次のように使用することでした。

 35.063" * 1/3 = 11.69"
 24.782" * 1/3 = 8.26"

しかし、それは、プログラムが後者の2つのレコードを確認するまで、ページのサイズを判別できなかったことを意味します。また、この種のことが起こっていると述べているドキュメントはどこにも見つかりませんでした。

誰かがこれに光を当てることができますか?

4

1 に答える 1

4

EMF には、診断ダンプで示されているよりも多くの情報が含まれている可能性があると思います。提供された EMR_HEADER レコードには nVersion が 0x00010000 に設定されているため、レコードには szlMillimeters の後に始まる次のフィールドが追加で含まれます。

    public uint     cbPixelFormat;
    public uint     offPixelFormat;
    public uint     bOpenGL;
    public SIZE     szlMicrometers;

これらのフィールドの値は、提供された診断ダンプにありません。これは、私のマシンにあった XP emf ファイルの先頭からの 16 進ダンプです。

 0: 01 00 00 00 6c 00 00 00 58 07 00 00 03 02 00 00  | ....l...X....... |
10: aa 0b 00 00 1f 04 00 00 95 1f 00 00 07 09 00 00  | ................ |
20: 07 31 00 00 15 11 00 00 20 45 4d 46 00 00 01 00  | .1...... EMF.... |
30: 44 07 00 00 2e 00 00 00 03 00 00 00 00 00 00 00  | D............... |
40: 00 00 00 00 00 00 00 00 61 13 00 00 68 1b 00 00  | ........a...h... |
50: d2 00 00 00 29 01 00 00 00 00 00 00 00 00 00 00  | ....)........... |
60: 00 00 00 00 50 34 03 00 28 88 04 00              | ....P4..(...     |

このスニペットでは、szlMicrometers フィールドが DWORD の最後のペアです。それらの値は 0x00033450、0x00048828 であり、1000 分の 1 mm の 10 進数で表されます。これらの値は 210000、297000 です。

于 2012-11-20T15:25:52.960 に答える