Как использовать шрифт из файла в SharpDX?

1

Я хочу создать образ для приложения Windows 8, я собираюсь использовать SharpDX API

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

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 пользовательских шрифтов, и я выбрал шрифт dynamically-, я знаю, что у вас есть файл для загрузки из папка.... help plz

Теги:
sharpdx
direct2d
windows-8

1 ответ

3
Лучший ответ

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню