mikeo_410


XPS中のImageBrushとSilverlight

  ワードで図を張り付けると、ImageBrushで表現されます。この記述が、Silverlightではエラーになります。

  1. <Path Data="M 1.5,18.75 L 152.25,18.75 L 152.25,53.25 L 1.5,53.25 Z" Clip="M 0,18 L 595.32,18 L 595.32,54 L 0,54 Z " AutomationProperties.HelpText="C:\CodeSamples\logo.png">
  2.   <Path.Fill>
  3.     <ImageBrush ImageSource="/Resources/Images/image_0.png" Viewbox="0,0,200.97,45.994" TileMode="None" ViewboxUnits="Absolute" ViewportUnits="Absolute" Viewport="0,0,1,1">
  4.       <ImageBrush.Transform>
  5.         <MatrixTransform Matrix="150.75,0,0,34.5,1.5,18.75" />
  6.       </ImageBrush.Transform>
  7.     </ImageBrush>
  8.   </Path.Fill>
  9. </Path>

  Silverlightでサポートされていない属性を見て見ます。

タグと値の例 機能
Viewbox="0,0,200.97,45.994" タイル内のイメージの位置とサイズ
TileMode="None" イメージを1つ表示する。(イメージをタイルとしてたくさん並べるような表示ができるがこの機能を使わない)
ViewboxUnits="Absolute" Viewboxの単位は絶対値
ViewportUnits="Absolute" Viewportの単位は絶対値
Viewport="0,0,1,1" タイルの位置とサイズ

  Silverlight には、タイルとしてイメージを貼る機能がないと言うことのようです。

  詳しく見て見ます。

  1. Pathの示す矩形
    この領域にイメージが表示されるわけで、次のようになっています。
     (1.5, 18.75) - (152.25, 53.25)
  2. Pathには、(0, 18) - (595.32, 54) のClipが指定されています。
    座標値から見てこのクリップは特に機能していないと考えられます。
    Clipはイメージの部分を表示する場合に有効なのだと思いますが、ワードでどう使えるのかは知りません。(問題あるまで、Clipは無視しておこうと思います。)
  3. ImageBrush の ViewBoxは、ほぼ (0,0) - (201, 46)で、張り付けたイメージのサイズです。
  4. ImageBrush の Viewportは、(0,0) - (1,1) で、座標を 0-1 に正規化することを示します。
  5. MatrixTransform は、0-1 に正規化した座標を、表示サイズに変換します。
    Matrix="150.75,0,0,34.5,1.5,18.75" は、Xの倍率 150.75、Yの倍率 34.5と、(0,0)を(1.5, 18.75)に移動する平行移動が設定されています。
    これにより、(1.5, 18.75) - (152.25, 53.25) で、Pathの矩形と同じになります。

  結論ですが、Pathで描かれる矩形いっぱいにイメージが描画されれば良いものとして、Silverlight ように置きかえます。

  1.  Viewbox、TileMode、ViewboxUnits、ViewportUnits、Viewport、ImageBrush.Transform を削除します。
  2. Stretch を追加します。

  ワードでどんな使い方が出来るのかわかりませんが、少なくともイメージ全体が表示されるような表示なら問題はないと思います。


mikeo_410@hotmail.com