2014-09-15 2 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-i에 약 604 개의 사용자 지정 글꼴이 있고 동적으로 글꼴을 선택했습니다. 폴더에서 파일을 불러올 수 있습니다 .... 도움 plz

답변

3

불행히도, afaik, 이것을 쉽게 지원하는 DirectWrite에는 API가 없습니다. 자신 만의 글꼴 로더 및 관련 클래스를 개발해야합니다. 리소스에서 글꼴을로드하는 SharpDX 예제 CustomFont이 있으므로 다른 위치에서로드 할 수 있도록 수정할 수 있습니다.

관련 문제