How to use a font from a file in SharpDX?

早过忘川 提交于 2019-12-10 11:36:34

问题


i want to generate image for windows 8 app, i'm going to use SharpDX API

here is the code sample which i thankfully coped and paste

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;
    }

this working in excellent way with installed fonts .... i have font in the assets folder and i want to use -i have about 604 custom fonts and i chose the font dynamically- , i know there is away to load file from folder .... help plz


回答1:


Unfortunately, afaik, there is no API in DirectWrite that supports this easily. You need to develop your own font loader and related classes. There is the SharpDX sample CustomFont that is loading fonts from resources, so you could adapt it to load from another location.



来源:https://stackoverflow.com/questions/25855964/how-to-use-a-font-from-a-file-in-sharpdx

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!