显卡

Browse sample.浏览示例

.NET Multi-platform App UI (.NET MAUI) 提供一个跨平台图形画布,可以在该画布上使用 Microsoft.Maui.Graphics 命名空间中的类型绘制二维空间图形。 此画布支持绘制形状和图像、组合操作和图形对象转换。

Microsoft.Maui.Graphics 提供的功能与 .NET MAUI 形状和画笔提供的功能之间存在许多相似之处。 但是,每个功能都针对不同的场景:

  • 必须在绘图画布上使用 Microsoft.Maui.Graphics 功能,才能绘制高性能图形,它还提供了一种便捷的方法,用来编写基于图形的控件。 例如,相较于使用 .NET MAUI 形状,使用 Microsoft.Maui.Graphics 时可以更轻松地实现用于复制 GitHub 贡献配置文件的控件。
  • 可以直接在页面上使用 .NET MAUI 形状,并且所有控件都可以使用画笔。 提供此功能有助于生成有吸引力的 UI。

有关 .NET MAUI 形状的详细信息,请参阅形状

绘制图形

在 .NET MAUI 中,GraphicsView 支持使用 Microsoft.Maui.Graphics 功能。 GraphicsView 定义类型为 IDrawableDrawable 属性,该属性指定控件将绘制的内容。 若要指定将绘制的内容,必须创建派生自 IDrawable 的对象,并实现其 Draw 方法:

namespace MyMauiApp
{
    public class GraphicsDrawable : IDrawable
    {
        public void Draw(ICanvas canvas, RectF dirtyRect)
        {
            // Drawing code goes here
        }      
    }
}

Draw 方法包含 ICanvasRectF 参数。 ICanvas 参数是在其上绘制图形对象的画布。 RectF 参数是 struct,其中包含有关画布大小和位置的数据。

在 XAML 中,可以将 IDrawable 对象声明为资源,然后由 GraphicsView 使用,方法是将其键指定为 Drawable 属性的值:

<ContentPage xmlns=http://schemas.microsoft.com/dotnet/2021/maui
             xmlns:x=http://schemas.microsoft.com/winfx/2009/xaml
             xmlns:drawable="clr-namespace:MyMauiApp"
             x:Class="MyMauiApp.MainPage">
    <ContentPage.Resources>
        <drawable:GraphicsDrawable x:Key="drawable" />
    </ContentPage.Resources>
    <VerticalStackLayout>
        <GraphicsView Drawable="{StaticResource drawable}"
                      HeightRequest="300"
                      WidthRequest="400" />
    </VerticalStackLayout>
</ContentPage>

有关 GraphicsView 的详细信息,请参阅 GraphicsView

画布

GraphicsView 控件提供对 ICanvas 对象的访问,通过其 IDrawable 对象,可以设置属性并调用方法来绘制图形对象。 有关在 ICanvas 上进行绘制的信息,请参阅绘制图形对象

ICanvas 定义以下属性,这些属性会影响在画布上绘制的对象的外观:

  • Alpha,类型为 float,指示对象的不透明度。
  • Antialias,类型为 bool,指定是否启用抗锯齿。
  • BlendMode,类型为 BlendMode,定义混合模式,该模式确定在现有对象之上呈现对象时会发生什么情况。
  • DisplayScale,类型为 float,表示在画布上缩放 UI 的缩放系数。
  • FillColor,类型为 Color,指示用于绘制对象内部的颜色。
  • Font,类型为 IFont,定义绘制文本时的字体。
  • FontColor,类型为 Color,指定绘制文本时的字体颜色。
  • FontSize,类型为 float,定义绘制文本时的字体大小。
  • MiterLimit,类型为 float,指定对象中线条联接的斜接长度限制。
  • StrokeColor,类型为 Color,指示用于绘制对象轮廓的颜色。
  • StrokeDashOffset,类型为 float,指定虚线图案中虚线开始的距离。
  • StrokeDashPattern,类型为 float[],指定勾勒对象轮廓所用虚线和间隙的图案。
  • StrokeLineCap,类型为 LineCap,描述线条开头和末尾的形状。
  • StrokeLineJoin,类型为 LineJoin,指定在形状顶点处使用的联接类型。
  • StrokeSize,类型为 float,指示对象轮廓的宽度。

默认情况下,ICanvasStrokeSize 设置为 1,将 StrokeColor 设置为黑色,将 StrokeLineJoin 设置为 LineJoin.Miter,并将 StrokeLineCap 设置为 LineJoin.Cap

画布状态

每个平台上的画布都有保持其状态的功能。 这样,便可以保留当前图形状态,并在需要时还原它。

但是,并非所有画布元素都是图形状态的元素。 图形状态不包括绘制对象(如路径)和着色对象(如渐变)。 每个平台上的图形状态的典型元素包括描边和填充数据以及字体数据。

可以使用以下方法操作每个 ICanvas 的图形状态:

  • SaveState,可保存当前图形状态。
  • RestoreState,将图形状态设置为最近保存的状态。
  • ResetState,将图形状态重置为其默认值。

注意

由这些方法保留的状态依赖于平台。