3

オブジェクトを構築しようとしていますが、プロパティがGlyphRunどのようにGlyphIndicesエンコードされているか理解できません。

たとえば、のXAML 文字列は "hello world" を作成します。次の規則が成り立つことは明らかです。

  • 43 -> 時間
  • 72 -> へ
  • 79 -> l

しかし、このコード体系は何ですか? ASCII を試してみましたが、適合しないようです。

何か考えはありますか?


<GlyphRunDrawing ForegroundBrush="Black">
  <GlyphRunDrawing.GlyphRun>
    <GlyphRun 
      CaretStops="{x:Null}" 
      ClusterMap="{x:Null}" 
      IsSideways="False" 
      GlyphOffsets="{x:Null}" 
      GlyphIndices="43 72 79 79 82 3 58 82 85 79 71" 
      BaselineOrigin="0,12.29"  
      FontRenderingEmSize="13.333333333333334" 
      DeviceFontName="{x:Null}" 
      AdvanceWidths="9.62666666666667 7.41333333333333 2.96 2.96 7.41333333333333 3.70666666666667 12.5866666666667 7.41333333333333 4.44 2.96 7.41333333333333" 
      BidiLevel="0">
      <GlyphRun.GlyphTypeface>
        <GlyphTypeface FontUri="C:\WINDOWS\Fonts\TIMES.TTF" />
      </GlyphRun.GlyphTypeface>
    </GlyphRun>
  </GlyphRunDrawing.GlyphRun>
</GlyphRunDrawing>
4

1 に答える 1

5

次のコードを使用して、Unicode コード ポイントをグリフ インデックスに変換します。

GlyphTypeface glyphTypeface = new GlyphTypeface(new Uri(@"C:\WINDOWS\Fonts\TIMES.TTF"));
const char character = 'и';
ushort glyphIndex;
glyphTypeface.CharacterToGlyphMap.TryGetValue(character, out glyphIndex); 
MessageBox.Show("Index = " + glyphIndex);

上記のサンプルは、キリル文字の и 文字に対して 610 を返します。

于 2012-06-03T15:10:31.690 に答える