首页
学习
活动
专区
圈层
工具
发布

WPF 简单聊聊如何使用 DrawGlyphRun 绘制文本

在 WPF 里面,提供的使用底层的方法绘制文本是通过 DrawGlyphRun 的方式,此方法适合用在需要对文本进行精细控制的定制化控件上。...此方法特别底层而让调用方法比较复杂,本文告诉大家一些简单的使用方法 本文也属于 WPF 渲染系列博客,更多渲染相关博客请看 渲染相关 在开始之前,我是来劝退的,如果没有特别的需求,还是不推荐使用 DrawGlyphRun...,绘制一个和窗口相同大小的矩形,这样就可以让 drawingVisual.Drawing.Bounds 的尺寸和窗口相同 using (var drawingContext = drawingVisual.RenderOpen...自己决定如果给定的字体创建失败了,则使用什么字体代替的方法叫做字体 Fallback 算法 关于如何做字体的回滚策略,还请参阅下文 字体回滚策略 内容 文字编号 每个文字在字体里面都可以有自己的编号,需要通过...,在输入时,可以给每个文字指定字号。

2.2K10

如何使用CSS绘制一个响应式的矩形

如何使用CSS绘制一个响应式的矩形 背景: 最近因为需要用到绘制类似九宫格的需求,所以研究了一下响应式矩形的实现方案。...有如下几种方案: 使用js来设置元素的高度 使用vw单位 div {width: 50vw; height: 50vw;} 使用伪元素设置padding的方式来实现正方形(也就是本次使用的方式) 实现一个正方形...content: ''; display: block; padding-top: 100%; } } 我们的做法就是使用伪元素的...padding-top: (3 / 4 * 100%); } // 1: 2 .square::before { padding-top: 200%; } 当然,上边的实现都只是一个简单的矩形...,如果你的矩形里边还要有一些内容的话,需要给元素添加以下几个属性: .content { position: absolute; top: 0; right: 0; bottom: 0;

2.8K100
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    WPF 源代码 从零开始写一个 UI 框架

    需要知道 WPF 是一个 UI 框架,作为一个 UI 框架,最主要的就是交互。也就是 UI 框架需要有渲染显示和处理用户输入的功能。...本文的顺序就是先开始渲染显示框架是如何做的,然后在告诉大家输入层是如何做的。 一个UI框架实际就是包含渲染和交互两方面,其他的都是细节。 刚才说道了绘制原语,需要解释一下,不知有没小伙伴不知道拼音的?...再引入元素的概念,元素的边框就是一个矩形,元素将可以在自己的矩形之内使用绘制原语画出元素。元素的概念属于框架级的,也就是原生是没有这个概念,原生只有绘制原语的概念。...当前的 WPF 就是使用矩形布局的方法,这个方法的性能很高。当然本文不会考虑旋转,不规则元素和透明元素的布局。...在布局完成了也就确定了每个元素的矩形范围,这时就可以用来做命中测试 这就是 UI 框架最核心的内容,看起来还是很简单的,对照博客看看 WPF 的源代码,其实很容易就理解 WPF 是如何封装。

    4.5K40

    【愚公系列】2023年11月 WPF控件专题 Rectangle控件详解

    欢迎 点赞✍评论⭐收藏前言WPF控件是Windows Presentation Foundation(WPF)中的基本用户界面元素。它们是可视化对象,可以用来创建各种用户界面。...WPF控件可以分为两类:原生控件和自定义控件。原生控件是由Microsoft提供的内置控件,如Button、TextBox、Label、ComboBox等。这些控件都是WPF中常见的标准用户界面元素。...自定义控件则允许开发人员使用XAML和C#等编程语言来创建个性化的用户界面元素。自定义控件可以根据需求提供更多的功能和自定义化选项,以及更好的用户体验。...一、Rectangle控件详解Rectangle控件是WPF中用于绘制矩形形状的控件。它可以在UI中用于多种用途,如绘制边框和填充区域等。...2.常用场景WPF中Rectangle控件常用于以下场景:绘制矩形图形:Rectangle控件可以用于绘制矩形图形并设置矩形的颜色、边框等属性。

    1.9K31

    WPF 动画性能测试应用 一千个半透明矩形做动画

    到本文末尾可以获取全部的可构建运行的代码,按照本文提供的方式可以获取到所有源代码 开始之前,先看一下运行效果 接下来将告诉大家这个测试应用是如何做的 为了将关注点在于渲染性能或者是动画性能本身,减少其他业务逻辑的干扰...,包括业务逻辑间接触发 WPF 的框架逻辑的干扰。...ActualWidth - size.Width)), Random.Shared.Next((int) (ActualHeight - size.Height))); 使用随机数生成矩形的起点和终点...创建纯色画刷本身不需要多少资源,请看 dotnet 读 WPF 源代码笔记 创建 SolidColorBrush 性能没有想象那么差 但是使用画刷是需要一些资源的 var...在 WPF 框架里面,将通过渲染调度逻辑将渲染的指导数据调度到 WPF 的 GFX 层。

    88340

    【愚公系列】2023年11月 WPF控件专题 Polygon控件详解

    欢迎 点赞✍评论⭐收藏前言WPF控件是Windows Presentation Foundation(WPF)中的基本用户界面元素。它们是可视化对象,可以用来创建各种用户界面。...WPF控件可以分为两类:原生控件和自定义控件。原生控件是由Microsoft提供的内置控件,如Button、TextBox、Label、ComboBox等。这些控件都是WPF中常见的标准用户界面元素。...自定义控件则允许开发人员使用XAML和C#等编程语言来创建个性化的用户界面元素。自定义控件可以根据需求提供更多的功能和自定义化选项,以及更好的用户体验。...绘制地图或其他图形:例如绘制地图中的国家、省份等区域形状。绘制数据可视化图表:例如绘制饼图、柱状图等,使用Polygon控件可以方便地绘制多边形的形状和填充颜色。...3.具体案例以下是一个简单的案例,演示如何使用Polygon控件绘制一个等边三角形:首先,创建一个WPF应用程序,取名为PolygonDemo。

    1.7K11

    WPF 使用 Edge 浏览器

    本文告诉大家如何使用 Windows Community Toolkit 的新控件,在 WPF 使用 Edge 浏览器 首先需要通过 VisualStudio 创建 WPF 项目。...存在的问题 吃掉了 Touch 事件、MouseDown事件,也就是吃掉了所有用户输入 第一次加载无法覆盖控件大小,在修改窗口大小之后才可以 设置 IsEnable 无作用 设置 IsHitTestVisible...无作用,依然可以响应输入 默认没有设置 IsManipulationEnable ,但是可以响应手势 能够使用 snoop 在视觉树找到 WebView 但是没有看到 WebView 里面的元素...大概就是如果同时有多个渲染,WPF 、 WinForms 如果两个绘制的矩形有重叠,那么重叠部分就不能正常使用。 ?...添加多个浏览器 如果在相同矩形区域添加多个浏览器,在逻辑树第一个浏览器显示在最前 我在代码打开了我的博客和黄腾霄博客,结果发现我的博客显示在前面 wpf:WebView x:Name=

    2.8K10

    WPF 使用 VisualBrush 在 4k 加 200 DPI 设备上某些文本不渲染看不见问题

    将 DrawingVisual 绘制到 VisualBrush 里面,再将 VisualBrush 作为贴图给矩形使用,这样的优势在于可以在命中测试的时候,只处理矩形。矩形命中测试的耗时可以忽略。...直接或间接 绘制到 VisualBrush 中 在 WPF 的底层文本绘制都是采用 GlyphRun 绘制,因此可以认定为影响为全部文本,以及对应的文本控件 现象: 有某些文本内容不绘制渲染出来,看不见某些文本内容...而将 dv 作为 VisualBrush 的输入,接着新建一个叫 ret 的 DrawingVisual 对象,在这里面重新绘制出矩形然后用 VisualBrush 做贴图 这样做的优势在于可以利用到...WPF 无视贴图的命中测试的特性,而提升性能 但是带来的问题就是存在某些 GlyphRun 的文本不绘制,在相同的 drawingContext 绘制的点和线是可见的,只有文本看不到 其中最优解决方法是干掉...此问题只有在使用特定的图表内容(很复杂)再加上放入到我的某个特定的应用里面才能复现,要调试 WPF 层的话,必须加入到我的应用层才能开始调试此问题。

    1.3K20

    WPF 使用 Edge 浏览器

    本文告诉大家如何使用 Windows Community Toolkit 的新控件,在 WPF 使用 Edge 浏览器 首先需要通过 VisualStudio 创建 WPF 项目。...Touch 事件、MouseDown事件,也就是吃掉了所有用户输入 第一次加载无法覆盖控件大小,在修改窗口大小之后才可以 设置 IsEnable 无作用 设置 IsHitTestVisible...无作用,依然可以响应输入 默认没有设置 IsManipulationEnable ,但是可以响应手势 能够使用 snoop 在视觉树找到 WebView 但是没有看到 WebView 里面的元素...大概就是如果同时有多个渲染,WPF 、 WinForms 如果两个绘制的矩形有重叠,那么重叠部分就不能正常使用。...wpf:WebView Grid.Column="0" Source="https://huangtengxiao.gitee.io/">wpf:WebView> 我尝试使用 Panel.ZIndex

    2.1K10

    WPF 基础 2D 图形学知识

    基本的代码都可以使用一句 dotnet run 跑起来,当然,前提是你的 dotnet 版本需要足够新 本文代码协议基于 MIT 协议,请放心抄代码 根据点集求外接矩形 先看图片,通过给定的点的集合,求这些点的外接矩形...以上代码放在 github 和 gitee 欢迎小伙伴访问 判断点在几何内 这个做法也叫命中测试,输入是一个 Geometry 和一个点,输出是判断点是否在闭合的 Geometry 几何内。...其实在不在 WPF 中,影响都不大,如何判断一个点在旋转后的矩形中,只需要根据公式计算就可以 根据公式可以求出点是否在旋转矩形 (0<AM⋅AB<AB⋅AB)∧(0<AM⋅AC<AC⋅AC) 以上逻辑中的...在 WPF 中可以使用两个点相减拿到向量。...从图片可以看到所有的向量都从 A 点出发,此时可以将 A 点设置为原点,如果此时的 M 是在矩形外,如认为是在如下图的左边,那么此时向量相乘的值就会是负数,因为相对于 A 作为原点 ?

    1.1K10

    WPF 通过 EXIF 设置和读取图片的旋转信息

    本文将告诉大家如何在 WPF 里面设置图片的 EXIF 信息,包括如何设置图片的旋转信息,以及如何读取 EXIF 的内容 值得一提的是在 WPF 里面,默认的图片渲染信息是无视 System.Photo.Orientation...信息的,一切都是推荐进行手动控制 在开始之前,咱先来用代码创建一张简单的图片 在 WPF 里面,使用代码进行绘图是一个非常高性能的方法,可以重复使用 DirectX 提供的高性能绘制能力,再加上 WPF...而且 WPF 的上层 API 是统一的,屏蔽掉很多细节,不需要更多额外的知识即可使用 先创建一个 DrawingVisual 对象,在这里面传入想要绘制的内容,接着使用 RenderTargetBitmap...drawingContext.DrawLine(new Pen(Brushes.Black, 2), new Point(2, 5), new Point(90, 5)); } 这里先绘制一个矩形是为了撑开范围...,作为画布大小 以上代码准确来说,是没有进行任何实际的绘制逻辑,只是告诉 WPF 框架,应该如何进行绘制。

    1.4K10

    WPF 使用 Direct2D1 画图 绘制基本图形

    本文来告诉大家如何在 Direct2D1 绘制基本图形,包括线段、矩形、椭圆 本文是一个系列 WPF 使用 Direct2D1 画图入门 WPF 使用 Direct2D1 画图 绘制基本图形...在开始前先告诉大家为何需要使用 Direct2D ,虽然 WPF 也是基于 DX 进行渲染,但是 WPF 做了很多兼容处理,所以没有比直接使用 Direct2D 的性能高。...,表示两个线段如何链接 矩形 画矩形使用 DrawRectangle ,参数需要传入 RectF 需要传入上下左右的浮点数。...var ellipse = new D2D.Ellipse(new D2D.Point2F(100, 100), 50, 50); 这就是绘制基本的图形。 那么如何填充图形?...文字 最后就是告诉大家如何绘制文字。 绘制文字需要使用 DirectWrite ,需要先创建 DWriteFactory 然后才可以绘制文本。

    99230

    WPF 对接 Vortice 在 Direct2D 绘制从 WIC 加载的图片

    本文告诉大家如何通过 Vortice 在 Direct2D 里面绘制图片,图片的来源是 WIC 加载出的图片 在上一篇博客告诉了大家如何对接 Vortice 调用 WIC 加载图片,上一篇博客是将 WIC...层创建的 IWICBitmap 图片放入到 WPF 层进行渲染。...本文将告诉大家如何在 Direct2D 里将 WIC 加载的图片绘制 核心的两个点就是用拿到的 IWICBitmapFrameDecode 进行 IWICFormatConverter 转换图片格式,转换为...converter = wicImagingFactory.CreateFormatConverter(); 接着调用 Initialize 方法进行初始化,这个 IWICFormatConverter 类型从设计上是继承...可以通过将图片转换为贴图画刷的方式然后通过矩形或其他几何承载,如以下的代码将图片绘制在矩形上,通过矩形控制绘制在哪个范围 using D2D.ID2D1Bitmap d2DBitmap

    71320

    WPF性能优化:形状(Shape)、几何图形(Geometry)和图画(Drawing)的使用

    在用户界面技术中,绘图是一个绕不开的话题。...什么是形状、几何图形和图画 在WPF中,形状(Shape)是专门用于表示直线、椭圆、矩形以及多边形的绘图图元(primitive),可以绘制到窗口或控件上。...X2="70" Y1="150" Y2="150" /> Rectangle 绘制矩形的元素,通过笔触(Stroke)绘制矩形边框,使用填充(Fill)绘制背景色,这两个属性至少得设置一个,否则不会绘制矩形...可以使用CombineMode属性选择如何组合两个几何图形。 PathGeometry 表示更为复杂的由弧线、曲线以及直线段构成的图形,并且可以是闭合的,也可以是不闭合的。...Geometry、Brush、Pen ImageDrawing 使用指定图像(通常是基于文件的位图)和矩形边界绘制图像 ImageSource、Rect VideoDrawing 结合播放视频文件的媒体播放器

    3.9K11

    WPF 使用 Direct2D1 画图 绘制基本图形

    本文来告诉大家如何在 Direct2D1 绘制基本图形,包括线段、矩形、椭圆 本文是一个系列 WPF 使用 Direct2D1 画图入门 WPF 使用 Direct2D1 画图 绘制基本图形...在开始前先告诉大家为何需要使用 Direct2D ,虽然 WPF 也是基于 DX 进行渲染,但是 WPF 做了很多兼容处理,所以没有比直接使用 Direct2D 的性能高。...,表示两个线段如何链接 矩形 画矩形使用 DrawRectangle ,参数需要传入 RectF 需要传入上下左右的浮点数。...var ellipse = new D2D.Ellipse(new D2D.Point2F(100, 100), 50, 50); 这就是绘制基本的图形。 那么如何填充图形?...文字 最后就是告诉大家如何绘制文字。 绘制文字需要使用 DirectWrite ,需要先创建 DWriteFactory 然后才可以绘制文本。

    1.7K10

    dotnet 读 WPF 源代码笔记 渲染层是如何将字符 GlyphRun 画出来的

    本文将和大家聊聊从 WPF 的渲染层获取到 GlyphRun 数据,到调用 DirectX 的各个渲染相关方法的过程,也就是 WPF 绘制文本字符的原理或者实现方法 大家印象中的绘制一段文本是调用 DrawText...在上一篇 WPF 简单聊聊如何使用 DrawGlyphRun 绘制文本 博客和大家介绍了在 WPF 里面如何使用底层的方式绘制文本。...使用以上简单的实现代码,在 WPF 底层是如何实现将文本字符在屏幕上显示出来的。...示意图仅仅只是用来告诉大家本文所聊的范围,而不是真正实际的文本字符排版布局绘制渲染过程 从总的方面来讲,在 WPF 的渲染层里面,即渲染线程通过 UI 线程输入的绘制命令获取到需要执行的渲染文本字符的任务...这是一个有趣的思路,在 WPF 渲染层里面,将调用 DirectWrite 层让 GlyphRun 输出 Alpha 纹理,接着调用 DirectX 绘制一个矩形,让矩形填充上文本前景色画刷,同时将 Alpha

    1.4K30

    WPF 元素裁剪 Clip 属性

    本文介绍如何在 WPF 使用 Clip 裁剪元素 在 WPF 的 UIElement 提供了 Clip 属性,这个属性默认是空,但是如果设置了这个属性就会对元素进行裁剪 这个属性是一个 Geometry...从图片很难看出来不同,只是可以看到两个矩形,第一个矩形比较大 对他进行圆形裁剪 public SisdecereYipuVayderyecallMawqere() {...WPF 通过 DrawingContext DrawImage 绘制图片 ---- 本文会经常更新,请阅读原文: https://lindexi.gitee.io/post/WPF-%...本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。...欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接: https://lindexi.gitee.io ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。

    2K20

    WPF 高性能笔

    本文告诉大家WPF的INK的实现,和如何做一个高性能的笔。 高性能的笔迹在 WPF 包含两个部分,一个是就是输入,第二个就是渲染。...如果需要经过路由事件才收到输入,如果有人在路由事件做了很多需要很长事件的代码,那么等待用户的路由事件就会使用很长的时间。 如果需要等待主界面的布局也就是如果主线程卡住了,就需要等待主线程才可以渲染。...所以按照原来的元素的输入渲染是无法做到高性能的,那么 WPF 的笔迹是如何做到很快?这里需要用到两个科技,一个就是输入使用 StylusPlugin 一个就是使用另一个 UI 线程解决渲染的速度。...在转发的过程,在 WPF 会通过 StylusPlugins 里静态字典,存放用户设置的类。在触摸线程会通过判断触摸点时候在命中对应的元素矩形区判断当前时候命中到这个元素。...这里判断命中测试和 WPF 说的命中测试使用的不是同相同的方法,这里只是简单获取每个界面元素的矩形,然后用触摸的点坐标判断是否在这个矩形内,也就是不判断元素是否被其他的元素挡住。

    98140
    领券