绘图: Shape, Path

Shape - 图形

  • Path - 路径

示例
1、演示“Shape”相关知识点
Drawing/Shape.xaml

<Page
    x:Class="Windows10.Drawing.Shape"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:Windows10.Drawing"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <Grid Background="Transparent">
        <StackPanel Margin="10 0 10 10">

            <!--
                Windows.UI.Xaml.Shapes.Shape - 图形
            -->

            <!--
                Line - 画直线
            -->
            <!--
                X1, Y1 - 直线起点坐标
                X2, Y2 - 直线终点坐标
            -->
            <Line X1="0" Y1="0" X2="300" Y2="100" Stroke="Blue" StrokeThickness="3" />

            <!--
                Rectangle - 画矩形
            -->
            <!--
                Width - 矩形宽
                Height - 矩形高
            -->
            <Rectangle Width="200" Height="50" Fill="Red" Stroke="Yellow" StrokeThickness="3" />

            <!--
                Polyline - 画折线(即多条连接起来的直线)
            -->
            <!--
                Points - 折线的每个点的坐标
            -->
            <Polyline Points="10,100 50,10 100,100" Stroke="Green" StrokeThickness="3" />

            <!--
                Polygon - 画多边形
            -->
            <!--
                Points - 多边形的每个点的坐标
            -->
            <Polygon Points="50,50 100,50 300,100 200,100 100,200" Fill="Yellow" Stroke="Red" StrokeThickness="6" />

            <!--
                Ellipse - 画椭圆
            -->
            <!--
                Width - 椭圆宽
                Height - 椭圆高
            -->
            <Ellipse Width="100" Height="50" Fill="Orange" Stroke="Red" StrokeThickness="6" />

            <!--
                矩形或椭圆在不设置宽和高时,可以指定其 Stretch 用以指定其相对于其容器的拉伸方式
                Stretch - 拉伸方式(Windows.UI.Xaml.Media.Stretch 枚举)
                    Fill - 充满容器,不保留长宽比
                    None - 不做任何处理,如果图片比容器大,则多出的部分被剪裁
                    Uniform - 等比缩放到容器(默认值)
                    UniformToFill - 充满容器,且保留长宽比,多出的部分被剪裁
            -->
            <Grid Width="200" Height="100" HorizontalAlignment="Left" Background="Black">
                <Ellipse Fill="Orange" Stroke="Red" StrokeThickness="6" Stretch="UniformToFill" />
            </Grid>

        </StackPanel>
    </Grid>
</Page>

2、演示“Path”相关知识点
Drawing/Path.xaml

<Page
    x:Class="Windows10.Drawing.Path"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:Windows10.Drawing"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <Grid Background="Transparent">
        <StackPanel Margin="10 0 10 10" HorizontalAlignment="Left">

            <!--
                Windows.UI.Xaml.Shapes.Path - 路径,以下演示如何通过 Path 绘制图形
                    Data - 要绘制的 Windows.UI.Xaml.Media.Geometry 数据(Geometry 有很多派生类,后面会一一介绍,其实都不太常用,最常用的就是直接画路径,见最后面)
            -->

            <Path Fill="Yellow" Stroke="Blue" StrokeThickness="6" Margin="5">
                <Path.Data>
                    <!--
                        EllipseGeometry - 椭圆
                            Center - 原点坐标
                            RadiusX - X轴半径
                            RadiusY - Y轴半径
                    -->
                    <EllipseGeometry Center="50,25" RadiusX="50" RadiusY="25" />
                </Path.Data>
            </Path>

            <Path Fill="Yellow" Stroke="Blue" StrokeThickness="6" Margin="5">
                <Path.Data>
                    <!--
                        RectangleGeometry - 矩形
                            Rect - 左上角点的坐标,矩形宽,矩形高
                    -->
                    <RectangleGeometry Rect="100,0,100,50" />
                </Path.Data>
            </Path>

            <Path Stroke="Blue" StrokeThickness="6" Margin="5">
                <Path.Data>
                    <!--
                        LineGeometry - 线
                            StartPoint - 起点坐标
                            EndPoint - 终点坐标
                    -->
                    <LineGeometry StartPoint="200,0" EndPoint="300,50" />
                </Path.Data>
            </Path>

            <Path Stroke="Blue" StrokeThickness="6" Margin="5">
                <Path.Data>
                    <!--
                        PathGeometry - 路径,一个可能由弧、曲线、椭圆、直线、矩形组成的复杂图形
                    -->
                    <PathGeometry>
                        <PathGeometry.Figures>
                            <!--
                                StartPoint - 起点坐标
                            -->
                            <PathFigure StartPoint="300,0">
                                <PathFigure.Segments>
                                    <!--
                                        Path 的 Segment 集合
                                    -->
                                    <PathSegmentCollection>
                                        <!--
                                            LineSegment - 单一线段
                                            PolyLineSegment - 线段集合
                                            ArcSegment - 弧(椭圆的一部分)
                                            BezierSegment - 两点之间的一条三次贝塞尔曲线
                                            QuadraticBezierSegment - 两点之间的一条二次贝塞尔曲线
                                            PolyBezierSegment - 一条或多条三次贝塞尔曲线
                                            PolyQuadraticBezierSegment - 一条或多条二次贝塞尔曲线
                                        -->
                                        <!--
                                            Size - 弧的 X 轴和 Y 轴半径
                                            Point - 该 Segment 的终点坐标,即下一个 Segment 的起点坐标
                                        -->
                                        <ArcSegment Size="100,25" Point="400,50" />
                                        <!--
                                            Point - 该 Segment 的终点坐标,即下一个 Segment 的起点坐标
                                        -->
                                        <LineSegment Point="500,100" />
                                    </PathSegmentCollection>
                                </PathFigure.Segments>
                            </PathFigure>
                        </PathGeometry.Figures>
                    </PathGeometry>
                </Path.Data>
            </Path>

            <Path Fill="Yellow" Stroke="Blue" StrokeThickness="6" Margin="5">
                <Path.Data>
                    <!--
                        本例演示 GeometryGroup 的 EvenOdd 填充规则
                        GeometryGroup - 由一个或多个 Geometry 组成
                            FillRule - 填充规则(System.Windows.Media.FillRule 枚举)
                                EvenOdd - 确定一个点是否位于填充区域内的规则,具体方法是从该点沿任意方向画一条无限长的射线,然后计算该射线在给定形状中因交叉而形成的路径段数。如果该数为奇数,则点在内部;如果为偶数,则点在外部。
                                Nonzero - 确定一个点是否位于填充区域内的规则,具体方法是从该点沿任意方向画一条无限长的射线,然后检查形状段与该射线的交点。从零开始计数,每当线段从左向右穿过该射线时加 1,而每当路径段从右向左穿过该射线时减 1。计算交点的数目后,如果结果为零,则说明该点位于路径外部。否则,它位于路径内部。
                    -->
                    <GeometryGroup FillRule="EvenOdd">
                        <LineGeometry StartPoint="200,0" EndPoint="300,100" />
                        <EllipseGeometry Center="250,50" RadiusX="50" RadiusY="50" />
                        <RectangleGeometry Rect="200, 0, 100, 100" />
                    </GeometryGroup>
                </Path.Data>
            </Path>

            <Path Fill="Yellow" Stroke="Blue" StrokeThickness="6" Margin="5">
                <Path.Data>
                    <!--
                        本例演示 GeometryGroup 的 Nonzero 填充规则
                        GeometryGroup - 由一个或多个 Geometry 组成
                            FillRule - 填充规则(System.Windows.Media.FillRule 枚举)
                                EvenOdd - 确定一个点是否位于填充区域内的规则,具体方法是从该点沿任意方向画一条无限长的射线,然后计算该射线在给定形状中因交叉而形成的路径段数。如果该数为奇数,则点在内部;如果为偶数,则点在外部。
                                Nonzero - 确定一个点是否位于填充区域内的规则,具体方法是从该点沿任意方向画一条无限长的射线,然后检查形状段与该射线的交点。从零开始计数,每当线段从左向右穿过该射线时加 1,而每当路径段从右向左穿过该射线时减 1。计算交点的数目后,如果结果为零,则说明该点位于路径外部。否则,它位于路径内部。
                    -->
                    <GeometryGroup FillRule="Nonzero">
                        <LineGeometry StartPoint="200,0" EndPoint="300,100" />
                        <EllipseGeometry Center="250,50" RadiusX="50" RadiusY="50" />
                        <RectangleGeometry Rect="200, 0, 100, 100" />
                    </GeometryGroup>
                </Path.Data>
            </Path>

            <!--
                演示 Path 最常用的用法,即直接画
                1、直接指定 Geometry 数据
                2、一般都是要借助工具,最流行的是“Metro Studio”,其 4.0 以上的版本可以在设计完后显示对应的 Geometry 代码
            -->
            <Path Fill="Black" Stroke="White" StrokeThickness="6" Data="M 10,100 L 100,100 100,50 Z M 10,10 100,10 100,40 Z" Margin="5" /> 

        </StackPanel>
    </Grid>
</Page>

时间: 2024-10-06 23:38:58

绘图: Shape, Path的相关文章

背水一战 Windows 10 (12) - 绘图: Shape, Path

[源码下载] 作者:webabcd 介绍背水一战 Windows 10 之 绘图 Shape - 图形 Path - 路径 示例1.演示“Shape”相关知识点Drawing/Shape.xaml <Page x:Class="Windows10.Drawing.Shape" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schema

Shape path too large to be rendered into a texture

Shape path too large to be rendered into a texture (747x8294, max=8192x8192) 图像显示的时候出现该问题,经分析是由于开启硬件加速导致加载的path大小被限制. 问题出现场景: 从相册或者本地选择图片,在gridView中展示.别的页面中可以使用类似图片浏览工具查看所有展示的图片. 当我的图片浏览页面中,加载所有的图片,当加载到大图片时候,出现OOM和 Bitmap too large to be uploaded int

我(webabcd)的文章索引

[最后更新:2014.08.28] 重新想象 Windows Store Apps 系列文章 重新想象 Windows 8 Store Apps 系列文章 重新想象 Windows 8 Store Apps (1) - 控件之文本控件: TextBlock, TextBox, PasswordBox, RichEditBox, RichTextBlock, RichTextBlockOverflow 重新想象 Windows 8 Store Apps (2) - 控件之按钮控件: Button,

ZRender源码分析6:Shape对象详解之路径

开始 说到这里,就不得不提SVG的路径操作了,因为ZRender完全的模拟了SVG原生的path元素的用法,很是强大. 关于SVG的Path,请看这里: Path (英文版) 或者 [MDN]SVG教程(5) 路径 [译] (中文版), 很明显的是canvas中的路径没有SVG的用着舒服,那到底ZRender是如何实现的呢,让我给你娓娓道来(不过要想继续进行下去,上面的SVG的PATH必须了解.). 示例 打开API,shape.path,可以看到,path的配置有MLHVCSQTZ等字母组成的

C#-gdi绘图,双缓冲绘图,Paint事件的触发---ShinePans

在使用gdi技术绘图时,有时会发现图形线条不够流畅,或者在改变窗体大小时会闪烁不断的现象.(Use DoubleBuffer to solve it!)                                                                                                                                                                              

core graphics path

当UIKit无法满足绘图需求的时候,就需要用到Core Graphics API,其中最普遍的就是path.一些重要的概念 graphics context 可以理解成canvas,在ios里对应CGContextRef类型,拿到它的方法是调用这个函数: UIGraphicsGetCurrentContext() graphics context有很多种,可以分别将图形绘制到bitmap,PDF,UIView里.最常见的当然就是往UIView里绘制,做法就是覆盖UIView的drawRect:方

Sliverlight之2 适量绘图

目标:在两天内完成一个环形图的绘制 准备:第5章 矢量绘图 1,形状绘图(见Project11) (1)线条用什么标签表示,它有哪几个重要属性 说明: Line标签 x1 y1表示起始点x,y坐标 x2 y2表示结束点x,y坐标 (2)画一条线(x1=100,y1=100 x2=200,y2=200) 说明: <Line Stroke="Green" StrokeThickness="3" X1="100" Y1="100&quo

安卓自定义View进阶 - Path之完结篇(伪)

Path之完结篇(伪) 作者微博: @GcsSloop [本系列相关文章] 经历过前两篇 Path之基本操作 和 Path之贝塞尔曲线 的讲解,本篇终于进入Path的收尾篇,本篇结束后Path的大部分相关方法都已经讲解完了,但Path还有一些更有意思的玩法,应该会在后续的文章中出现吧,嗯,应该会的ˊ_>ˋ 一.Path常用方法表 为了兼容性(偷懒) 本表格中去除了在API21(即安卓版本5.0)以上才添加的方法.忍不住吐槽一下,为啥看起来有些顺手就能写的重载方法要等到API21才添加上啊.宝宝此

C# Wpf Shape类继承关系

Path派生于Shape namespace System.Windows.Shapes { public sealed class Path : Shape { // Path 派生于Shape } } Shape 派生于FrameworkElement namespace System.Windows.Shapes { //Shape 从FrameworkElement派生而来 public abstract class Shape : FrameworkElement { } } Fram