3

我正在尝试构建一个GlyphRun对象,但我似乎无法理解GlyphIndices属性是如何编码的。

例如,以下XAML 字符串创建“hello world”。很明显,以下规则成立:

  • 43->小时
  • 72 -> e
  • 79 -> 升

但是这个编码方案是什么?我尝试了 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);

上面的示例为 Cyrillic и 字符返回 610。

于 2012-06-03T15:10:31.690 回答