2014-09-15 3 views
1

я хочу, чтобы создать изображение для окон 8 приложения, я собираюсь использовать SharpDX APIКак использовать шрифт из файла в SharpDX?

здесь пример кода, который я к счастью справлялся и вставить

private MemoryStream RenderStaticTextToBitmap() 
    { 
     var width = 400; 
     var height = 100; 
     var pixelFormat = WicPixelFormat.Format32bppBGR; 

     var wicFactory = new ImagingFactory(); 
     var dddFactory = new SharpDX.Direct2D1.Factory(); 
     var dwFactory = new SharpDX.DirectWrite.Factory(); 

     var wicBitmap = new Bitmap(
      wicFactory, 
      width, 
      height, 
      pixelFormat, 
      BitmapCreateCacheOption.CacheOnLoad); 

     var renderTargetProperties = new RenderTargetProperties(
      RenderTargetType.Default, 
      new D2DPixelFormat(Format.Unknown, AlphaMode.Unknown), 
      0, 
      0, 
      RenderTargetUsage.None, 
      FeatureLevel.Level_DEFAULT); 
     var renderTarget = new WicRenderTarget(
      dddFactory, 
      wicBitmap, 
      renderTargetProperties) 
     { 
      TextAntialiasMode = TextAntialiasMode.Cleartype 
     }; 

     renderTarget.BeginDraw(); 

     var textFormat = new TextFormat(dwFactory, "Consolas", 48) 
     { 
      TextAlignment = SharpDX.DirectWrite.TextAlignment.Center, 
      ParagraphAlignment = ParagraphAlignment.Center 
     }; 
     var textBrush = new SharpDX.Direct2D1.SolidColorBrush(
      renderTarget, 
      SharpDX.Colors.Blue); 

     renderTarget.Clear(Colors.White); 
     renderTarget.DrawText(
      "Hi, mom!", 
      textFormat, 
      new RectangleF(0, 0, width, height), 
      textBrush); 

     renderTarget.EndDraw(); 

     var ms = new MemoryStream(); 

     var stream = new WICStream(
      wicFactory, 
      ms); 

     var encoder = new PngBitmapEncoder(wicFactory); 
     encoder.Initialize(stream); 

     var frameEncoder = new BitmapFrameEncode(encoder); 
     frameEncoder.Initialize(); 
     frameEncoder.SetSize(width, height); 
     frameEncoder.PixelFormat = WicPixelFormat.FormatDontCare; 
     frameEncoder.WriteSource(wicBitmap); 
     frameEncoder.Commit(); 

     encoder.Commit(); 

     frameEncoder.Dispose(); 
     encoder.Dispose(); 
     stream.Dispose(); 

     ms.Position = 0; 
     return ms; 
    } 

это рабочий в отличном пути с установленными шрифтами .... у меня есть шрифт в папке с активами, и я хочу использовать -i около 604 пользовательских шрифтов, и я выбрал шрифт динамически, я знаю, что вам нужно загрузить файл из папки .... help plz

ответ

3

К сожалению, afaik, API в DirectWrite не поддерживает это легко. Вам необходимо разработать собственный загрузчик шрифтов и связанные с ним классы. Существует образец SharpDX CustomFont, который загружает шрифты из ресурсов, поэтому вы можете адаптировать его для загрузки из другого места.

Смежные вопросы