WPF -- 画刷(Brush)(简介)

WPF中 GDI+ 支持画刷,画刷用于填充图形,如矩形,椭圆,多边形和封闭路径。

GDI+: GDI+是Windows XP中的一个子系统,它主要负责在显示屏幕和打印设备输出有关信息,它是一组通过C++类实现的应用程序编程接口。顾名思义,GDI+是以前版本GDI的继承者,出于兼容性考虑,Windows XP仍然支持以前版本的GDI,但是在开发新应用程序的时候,开发人员为了满足图形输出需要应该使用GDI+,因为GDI+对以前的Windows版本中GDI进行了优化,并添加了许多新的功能。
  作为图形设备接口的GDI+使得应用程序开发人员在输出屏幕和打印机信息的时候无需考虑具体显示设备的细节,他们只需调用GDI+库输出的类的一些方法即可完成图形操作,真正的绘图工作由这些方法交给特定的设备驱动程序来完成,GDI+使得图形硬件和应用程序相互隔离.从而使开发人员编写设备无关的应用程序变得非常容易。GDI+编程小结

在GDI+中,画刷分为以下几种:SolidBrush,TextureBrush,HatchBrush,LinearGradientBrush和PathGradientBrush。在层次关系上,它们都位于System.Drawing空间下,继承自System.Drawing.Brush类。

其中SolidBrush定义单色画刷;TextureBrush定义纹理画刷,HatchBrush使用预定义的50余种图案做画刷,LinearGradientBrush是线性渐变画刷,PathGradientBrush是通过渐变填充GraphicsPath对象的内部。

它们的继承关系如下图:
System.Object
  System.MarshalByRefObject
    System.Drawing.Brush
      System.Drawing.SolidBrush
      System.Drawing.TextureBrush
      System.Drawing.Drawing2D.HatchBrush
      System.Drawing.Drawing2D.LinearGradientBrush
      System.Drawing.Drawing2D.PathGradientBrush

那么,在WPF中,是如何定义画刷的呢?它们与GDI+中的画刷相比,又有些什么独特之处呢?

首先,我们来看看WPF中有哪些画刷?

从大分类来讲,WPF中的画刷分为三大类:单色画刷SolidColorBrush,可平铺的画刷TileBrush和渐变画刷GradientBrush

不妨先看看它们的继承关系:

它们的继承关系如下图:
System.Object
  System.MarshalByRefObject
    System.Drawing.Brush
      System.Drawing.SolidBrush
      System.Drawing.TextureBrush
      System.Drawing.Drawing2D.HatchBrush
      System.Drawing.Drawing2D.LinearGradientBrush
      System.Drawing.Drawing2D.PathGradientBrush

那么,在WPF中,是如何定义画刷的呢?它们与GDI+中的画刷相比,又有些什么独特之处呢?

首先,我们来看看WPF中有哪些画刷?

从大分类来讲,WPF中的画刷分为三大类:单色画刷SolidColorBrush,可平铺的画刷TileBrush和渐变画刷GradientBrush

不妨先看看它们的继承关系:



从上图可以看出,WPF中的画刷都位于System.Windows.Media命名空间下。
继承自TileBrush的有三种: DrawingBrush,ImageBrush,VisualBrush ; 继承自GradientBrush的有两种画刷: LinearGradientBrush RadialGradientBrush
加上 SolidColorBrush ,WPF中实际共有六种画刷(上图中已用画“勾”的方式标明)。
其中,SolidColorBrush使用单色填充指定区域,DrawingBrush是图画绘制画刷(包括矢量图和位图),ImageBrush是使用图像做画刷,而VisualBrush是以可视化的控件作为画刷,比如:可使用矩形Rect,文本TextBlock,甚至按钮Button、动画、视频等等作为画刷;与GDI+类似,WPF中使用LinearGradientBrush作为线性渐变画刷;但WPF新增了一个镭射渐变画刷RadialGradientBrush。

让我们来看看它们都“长”成什么样子吧。还是以实例来走马观花式地看看它们。

下面是一个空的“容器”,我们将用它来“装”各种东西。
空的容器


XAML代码:
<Ellipse x:Name="ellipseWithNothing" Width="113.56" Height="113.56" Fill="{x:Null}" Stroke="#FF000000" />

这里的Fill填充为空。

接着我们给它填充点单一的颜色(SolidColorBrush):
SolidColorBrush填充的效果
XAML代码:
<Ellipse x:Name="ellipseWithSolidColorBrush" Width="113.56" Fill="#FFA21212" Stroke="#FF000000" />
注意这里的Fill属性,由于XAML最终被转化为.Net代码,这里的Fill也将转换为颜色为“#FFA21212”的SolidColorBrush。

如你对于WPF颜色方面有疑问,你可以参见我的这篇文章:GDI+与WPF中的颜色简析

接下来我们改用线性渐变颜色填充它:(使用LinearGradientBrush
LinearGradientBrush填充
XAML代码:

 <Ellipse x:Name="ellipseWithLinearGradientBrush" Height="113.56" Stroke="#FF000000" Width="113.56">
   <Ellipse.Fill>
    <LinearGradientBrush EndPoint="0.851,0.838" StartPoint="0.115,0.169">
     <GradientStop Color="#FFA21212" Offset="0"/>
     <GradientStop Color="#FFF8C906" Offset="1"/>
    </LinearGradientBrush>
   </Ellipse.Fill>
  </Ellipse>

注意:这里使用了GradientStop来定义渐变颜色的关键色及对应的位置参数设置)

变多点花样,我们就可以做成一个带立体感的圆形按钮了:
线性渐变做成的按钮
XAML代码:

<Ellipse x:Name="ellipseWithLinearGradientBrushButtonOuter" Stroke="#FF000000" HorizontalAlignment="Left" Margin="130.015,156.959,0,175.481" Width="113.559">
   <Ellipse.Fill>
    <LinearGradientBrush EndPoint="0.851,0.838" StartPoint="0.115,0.169">
     <GradientStop Color="#FFA21212" Offset="0"/>
     <GradientStop Color="#FFF8C906" Offset="1"/>
    </LinearGradientBrush>
   </Ellipse.Fill>
  </Ellipse>
  <Ellipse x:Name="ellipseWithLinearGradientBrushButtonInner" Stroke="#FF000000" Width="89.006" HorizontalAlignment="Left" Margin="142.264,169.263,0,187.731">
   <Ellipse.Fill>
    <LinearGradientBrush EndPoint="0.129,0.129" StartPoint="0.879,0.845">
     <GradientStop Color="#FFA21212" Offset="0"/>
     <GradientStop Color="#FFF8C906" Offset="1"/>
    </LinearGradientBrush>
   </Ellipse.Fill>
  </Ellipse>

(注:这里只是将起始颜色的起始、终止点进行了反向,这样就产生了立体的效果)

接着,我们使用RadialGradientBrush:
RadialGradientBrush
XAML代码:

 <Ellipse x:Name="ellipseWithRadialGradientBrush" Height="113.56" Stroke="#FF000000">
   <Ellipse.Fill>
    <RadialGradientBrush>
     <GradientStop Color="#FFA21212" Offset="1"/>
     <GradientStop Color="#FFF8C906" Offset="0"/>
    </RadialGradientBrush>
   </Ellipse.Fill>
  </Ellipse>

再变变花样,将中心点移一移,看看是什么样子的:
中心点移位后的镭射渐变效果
XAML代码:
 <Ellipse x:Name="ellipseWithRadialGradientBrushCenterOffset" Stroke="#FF000000">
   <Ellipse.Fill>
    <RadialGradientBrush GradientOrigin="0.399,0.149">
     <GradientStop Color="#FFA21212" Offset="1"/>
     <GradientStop Color="#FFF8C906" Offset="0"/>
    </RadialGradientBrush>
   </Ellipse.Fill>
  </Ellipse>

下面来看看使用 ImageBrush 填充的效果
XAML代码:
<Ellipse x:Name="ellipseWithImageBrush" Stroke="#FF000000" Width="113" Height="113">
   <Ellipse.Fill>
    <ImageBrush ImageSource="xian.png"/>
   </Ellipse.Fill>
  </Ellipse>

再来看看使用VisualBrush填充的效果:
VisualBrush填充
XAML代码:
<Ellipse x:Name="ellipseWithVisualBrush" Width="113" Stroke="#FF000000" Height="113">
  <Ellipse.Fill>
<VisualBrush>
      <VisualBrush.Visual>
        <StackPanel Background="White">
          <Rectangle Width="25" Height="25" Fill="Orange" Margin="6" />
          <TextBlock FontSize="10pt" Margin="2">BrawDraw</TextBlock>
          <Button Margin="10">Button</Button>
        </StackPanel>
      </VisualBrush.Visual>
    </VisualBrush>
</Ellipse.Fill>
  </Ellipse>

看到没?这里使用了Rectangle,TextBlock,Button几种可视化的控件作为画刷,填充到了Ellipse中。

轮到DrawingBrush出场了:
DrawingBrush填充后的效果
XAML代码:

<Ellipse x:Name="ellipseWithDrawingBrush" Stroke="#FF000000" Width="113" Height="113">
  <Ellipse.Fill>
  <DrawingBrush Viewport="0,0,0.5,0.5" TileMode="Tile">
          <DrawingBrush.Drawing>
            <GeometryDrawing Brush="Red">
              <GeometryDrawing.Geometry>
                <GeometryGroup>
                  <EllipseGeometry RadiusX="20" RadiusY="45" Center="50,50" />
                  <EllipseGeometry RadiusX="45" RadiusY="20" Center="50,50" />
                </GeometryGroup>
              </GeometryDrawing.Geometry>
              <GeometryDrawing.Pen>
                <Pen Thickness="10">
                  <Pen.Brush>
                    <LinearGradientBrush>
                      <GradientStop Offset="0.0" Color="Black" />
                      <GradientStop Offset="1.0" Color="Gray" />
                    </LinearGradientBrush>
                  </Pen.Brush>
                </Pen>
              </GeometryDrawing.Pen>
            </GeometryDrawing>
          </DrawingBrush.Drawing>
        </DrawingBrush>
</Ellipse.Fill>
  </Ellipse>

这里使用了 GeometryDrawing 作为内部填充的图案,还使用了作为 LinearGradientBrush 画笔来绘制内部图案的。

在看一个使用 DrawingBrush的例子:
XAML代码:
 <Ellipse Margin="118.5,82.5,45.833,94.5">
        <Ellipse.Effect>
            <DropShadowEffect Color="{DynamicResource {x:Static SystemColors.ControlLightLightColorKey}}"/>
        </Ellipse.Effect>
        <Ellipse.Fill>
            <DrawingBrush Stretch="Uniform">
                <DrawingBrush.Drawing>
                    <DrawingGroup>
                        <GeometryDrawing Geometry="F1M314,22.1249C432.672,22.1249 528.875,118.328 528.875,237 528.875,355.672 432.672,451.875 314,451.875 195.328,451.875 99.1248,355.672 99.1248,237 99.1248,118.328 195.328,22.1249 314,22.1249z M314,51.0359C211.295,51.0359 128.036,134.295 128.036,237 128.036,339.705 211.295,422.964 314,422.964 416.705,422.964 499.964,339.705 499.964,237 499.964,134.295 416.705,51.0359 314,51.0359z">
                            <GeometryDrawing.Brush>
                                <RadialGradientBrush RadiusX="0.5" RadiusY="0.5" GradientOrigin="0.5,0.5" Center="0.5,0.5">
                                    <RadialGradientBrush.RelativeTransform>
                                        <TransformGroup />
                                    </RadialGradientBrush.RelativeTransform>
                                    <GradientStop Color="#C0FFAA00" Offset="0" />
                                    <GradientStop Color="#C0FF7B00" Offset="0.52968"/>
                                    <GradientStop Color="#C0C33600" Offset="1"/>
                                </RadialGradientBrush>
                            </GeometryDrawing.Brush>
                            <GeometryDrawing.Pen>
                                <Pen Brush="#27000000" LineJoin="Round" Thickness="7" />
                            </GeometryDrawing.Pen>
                        </GeometryDrawing>
                        <GeometryDrawing Geometry="F1M314,75.2265C403.345,75.2265 475.773,147.655 475.773,237 475.773,326.345 403.345,398.773 314,398.773 224.655,398.773 152.226,326.345 152.226,237 152.226,147.655 224.655,75.2265 314,75.2265z">
                            <GeometryDrawing.Brush>
                                <RadialGradientBrush RadiusX="0.613236" RadiusY="0.613236" GradientOrigin="0.349879,0.320823" Center="0.349879,0.320823">
                                    <RadialGradientBrush.RelativeTransform>
                                        <TransformGroup/>
                                    </RadialGradientBrush.RelativeTransform>
                                    <GradientStop Color="#FFFFAA00" Offset="0" />
                                    <GradientStop Color="#FFFF7B00" Offset="0.52968"/>
                                    <GradientStop Color="#FFC33600" Offset="1"/>
                                </RadialGradientBrush>
                            </GeometryDrawing.Brush>
                            <GeometryDrawing.Pen >
                                <Pen Brush="#40000000" LineJoin="Round" Thickness="7" />
                            </GeometryDrawing.Pen>
                        </GeometryDrawing>
                        <GeometryDrawing Brush="#4DFFFFFF" Geometry="F1M157.841,265.533C142.319,179.133 199.776,96.5089 286.175,80.9863 372.575,65.4637 455.199,122.921 470.722,209.321 478.801,254.288 467.111,298.233 441.861,332.227 463.016,301.118 472.481,262.027 465.303,222.074 450.748,141.06 373.274,87.1843 292.26,101.739 211.246,116.294 157.37,193.768 171.925,274.782 182.834,335.504 229.091,380.98 285.691,393.823 222.386,382.241 169.892,332.609 157.841,265.533z"/>
                        <GeometryDrawing Brush="#FF7D2500" Geometry="F1M159.711,201.088C157.087,201.784 154.011,202.391 150.484,202.911 146.958,203.431 142.101,204.247 135.913,205.36 132.212,205.939 128.786,207.234 125.634,209.247 122.483,211.259 121.171,214.356 121.698,218.535 122.983,223.02 125.175,225.092 128.274,224.752 131.372,224.412 133.686,227.139 135.215,232.934 136.424,240.111 137.31,250.716 137.873,264.748 138.435,278.781 138.127,289.269 136.946,296.211 135.849,299.806 133.934,302.056 131.204,302.962 128.474,303.868 127.314,306.26 127.724,310.137 128.364,314.5 131.276,317.005 136.463,317.651 141.649,318.297 150.21,317.462 162.146,315.146 166.995,314.526 173.157,312.979 180.631,310.506 188.105,308.033 191.723,303.905 191.487,298.123 190.41,294.828 188.268,293.298 185.06,293.533 181.851,293.768 179.622,291.772 178.372,287.546 176.32,276.163 175.665,269.193 176.406,266.637 177.148,264.081 178.341,262.917 179.984,263.144 183.631,263.169 185.679,265.6 186.129,270.438 186.579,275.275 189.303,277.58 194.3,277.354 200.028,275.484 202.986,270.56 203.175,262.582 203.365,254.605 202.872,248.021 201.696,242.829 201.163,239.458 199.914,236.045 197.949,232.59 195.984,229.135 193.105,227.599 189.313,227.983 184.573,229.47 182.392,232.295 182.772,236.459 183.151,240.623 181.194,243.406 176.899,244.81 176.019,245.023 175.246,245.108 174.58,245.062 173.914,245.017 173.478,244.52 173.271,243.569 172.924,241.392 172.699,238.405 172.596,234.609 172.494,230.813 172.457,227.75 172.486,225.421 172.075,222.597 172.584,220.466 174.014,219.029 175.444,217.593 179.436,216.287 185.989,215.112 193.137,214.479 197.742,216.408 199.803,220.899 201.865,225.389 205.519,227.495 210.766,227.216 214.542,226.401 217.034,224.612 218.242,221.848 219.451,219.084 219.713,215.959 219.028,212.473 218.189,208.142 215.983,203.528 212.41,198.631 208.836,193.733 204.642,191.477 199.826,191.862 199.345,192.031 197.891,192.623 195.464,193.637 193.048,194.514 188.857,195.562 182.891,196.779L159.711,201.088z">
                            <GeometryDrawing.Pen>
                                <Pen Brush="#FF7D2500" LineJoin="Round" Thickness="8" />
                            </GeometryDrawing.Pen>
                        </GeometryDrawing>
                        <GeometryDrawing Brush="#FF7D2500" Geometry="F1M317.536,217.552C317.431,216.434 317.334,215.089 317.244,213.517 317.155,211.945 317.019,210.607 316.837,209.503 316.273,206.881 315.048,205.241 313.161,204.582 311.273,203.923 309.108,203.849 306.664,204.357 303.574,204.915 300.001,206.022 295.944,207.68 291.887,209.338 288.842,211.37 286.811,213.776 284.356,217.671 283.601,223.653 284.545,231.722 285.49,239.791 285.269,248.004 283.882,256.363 283.376,258.611 282.434,261.022 281.055,263.596 279.676,266.17 277.715,267.789 275.171,268.453 271.933,268.424 270.107,265.976 269.694,261.107 269.281,256.239 269.154,252.943 269.311,251.22 269.305,246.592 269.297,241.225 269.286,235.121 269.276,229.016 269.004,224.245 268.473,220.808 267.965,217.857 266.948,215.728 265.422,214.423 263.897,213.117 261.637,212.738 258.643,213.284 254.345,214.127 250.127,215.561 245.987,217.585 241.847,219.608 237.995,221.917 234.431,224.511 232.012,226.122 229.487,228.328 226.856,231.128 224.225,233.927 223.072,236.945 223.397,240.179 223.845,242.153 224.79,243.317 226.231,243.672 227.672,244.026 229.221,244.093 230.879,243.874 233.392,243.79 234.877,244.512 235.334,246.04 235.792,247.568 236.026,249.425 236.039,251.61 236.326,257.364 236.432,263.229 236.357,269.207 236.282,275.185 236.649,280.276 237.457,284.482 239.77,294.667 245.437,299.168 254.46,297.985 262.762,296.119 269.537,292.513 274.785,287.17 280.033,281.826 283.556,278.664 285.355,277.682 287.744,277.844 289.437,279.957 290.432,284.018 291.427,288.08 294.238,289.984 298.865,289.731 304.405,288.591 311.071,285.404 318.864,280.171 326.656,274.938 330.439,269.275 330.213,263.18 329.861,261.311 329.19,260.27 328.201,260.06 327.212,259.849 325.828,259.918 324.047,260.268 320.959,261.034 319.083,259.77 318.418,256.476 318.043,254.03 317.898,251.541 317.983,249.01L317.536,217.552z" >
                            <GeometryDrawing.Pen >
                                <Pen Brush="#FF7D2500" LineJoin="Round" Thickness="8" />
                            </GeometryDrawing.Pen>
                        </GeometryDrawing>
                        <GeometryDrawing Brush="#FF7D2500" Geometry="F1M392.063,233.962C392.137,238.293 392.142,242.893 392.076,247.762 392.011,252.631 392.316,257.134 392.993,261.272 393.692,264.82 395.188,267.289 397.48,268.679 399.772,270.07 402.634,270.444 406.064,269.803 411.242,268.796 417.403,265.981 424.547,261.357 431.692,256.733 435.119,251.441 434.83,245.479 434.023,242.879 432.511,241.708 430.294,241.967 428.077,242.225 426.558,241.015 425.736,238.336 424.998,233.097 424.719,226.519 424.899,218.601 425.079,210.684 424.765,203.922 423.959,198.315 422.863,193.4 420.337,189.967 416.383,188.017 412.428,186.068 408.125,185.516 403.474,186.361 396.708,188.225 390.955,191.721 386.216,196.849 381.476,201.977 378.1,205.031 376.087,206.012 374.029,205.788 372.486,203.648 371.455,199.593 370.425,195.538 367.708,193.616 363.305,193.828 359.267,194.699 354.586,196.569 349.261,199.437 343.936,202.306 339.675,205.132 336.478,207.915 334.82,209.224 333.296,210.814 331.904,212.685 330.513,214.556 329.949,216.527 330.213,218.598 330.667,221.62 332.414,222.898 335.456,222.433L337.02,222.142C340.132,221.626 341.894,222.978 342.304,226.198 343.607,233.627 344.087,242.12 343.743,251.676 343.4,261.231 343.49,268.283 344.015,272.831 344.772,276.214 346.395,278.27 348.883,279 351.372,279.73 354.064,279.707 356.96,278.931 366.674,276.774 372.875,273.829 375.562,270.095 378.248,266.362 379.039,260.209 377.935,251.639 377.186,245.96 377.006,238.938 377.394,230.573 377.781,222.209 380.663,217.112 386.039,215.285 387.507,215.046 388.683,215.332 389.568,216.143 390.453,216.954 391.03,218.087 391.297,219.544L392.063,233.962z">
                            <GeometryDrawing.Pen >
                                <Pen Brush="#FF7D2500" LineJoin="Round" Thickness="8"/>
                            </GeometryDrawing.Pen>
                        </GeometryDrawing>
                        <GeometryDrawing Brush="#FF7D2500" Geometry="F1M485.297,224.766C489.908,220.926 493.953,220.178 497.431,222.523 500.908,224.868 502.35,228.046 501.756,232.057 501.162,236.069 498.825,239.613 494.746,242.688 490.666,245.764 486.82,246.601 483.206,245.2 479.592,243.799 477.884,241.003 478.082,236.812 478.281,232.621 480.685,228.606 485.297,224.766z M512.582,146.766C511.527,151.242 508.59,163.661 503.772,184.021 498.954,204.381 495.368,214.779 493.014,215.217 490.66,215.654 489.939,206.04 490.849,186.372 491.76,166.705 492.472,154.486 492.983,149.714 493.495,144.942 495.849,140.991 500.044,137.86 504.24,134.73 507.642,134.308 510.249,136.595 512.857,138.883 513.634,142.273 512.582,146.766z">
                            <GeometryDrawing.Pen>
                                <Pen Brush="#FF7D2500" LineJoin="Round" Thickness="8"/>
                            </GeometryDrawing.Pen>
                        </GeometryDrawing>
                        <GeometryDrawing
Geometry="F1M158.184,198.688C155.56,199.384 152.484,199.991 148.957,200.511 145.431,201.031 140.574,201.847 134.387,202.96 130.685,203.539 127.259,204.834 124.107,206.847 120.956,208.859 119.644,211.955 120.171,216.135 121.457,220.62 123.648,222.692 126.747,222.352 129.845,222.012 132.159,224.739 133.688,230.534 134.897,237.711 135.783,248.316 136.346,262.348 136.908,276.381 136.6,286.868 135.42,293.81 134.322,297.406 132.407,299.656 129.677,300.562 126.947,301.468 125.787,303.859 126.198,307.736 126.837,312.1 129.75,314.605 134.936,315.251 140.122,315.897 148.683,315.062 160.619,312.746 165.469,312.126 171.63,310.579 179.104,308.106 186.578,305.633 190.197,301.505 189.96,295.723 188.883,292.428 186.741,290.898 183.533,291.133 180.324,291.368 178.095,289.372 176.845,285.146 174.793,273.762 174.138,266.793 174.88,264.237 175.621,261.681 176.814,260.517 178.457,260.744 182.104,260.769 184.152,263.2 184.602,268.037 185.053,272.874 187.776,275.18 192.773,274.954 198.501,273.084 201.459,268.16 201.648,260.182 201.838,252.205 201.345,245.62 200.169,240.429 199.636,237.058 198.387,233.645 196.422,230.19 194.457,226.735 191.578,225.199 187.786,225.583 183.046,227.069 180.865,229.894 181.245,234.058 181.625,238.222 179.667,241.006 175.372,242.409 174.492,242.623 173.719,242.707 173.053,242.662 172.387,242.617 171.951,242.119 171.744,241.169 171.397,238.992 171.172,236.005 171.07,232.209 170.967,228.413 170.93,225.35 170.959,223.021 170.548,220.197 171.057,218.066 172.487,216.629 173.917,215.193 177.909,213.887 184.462,212.711 191.61,212.079 196.215,214.008 198.276,218.499 200.338,222.989 203.992,225.095 209.24,224.816 213.015,224.001 215.507,222.212 216.715,219.448 217.924,216.684 218.186,213.559 217.501,210.073 216.662,205.742 214.456,201.128 210.883,196.231 207.309,191.333 203.115,189.077 198.299,189.462 197.818,189.631 196.364,190.223 193.937,191.236 191.521,192.114 187.33,193.162 181.364,194.379L158.184,198.688z"
  >
                            <GeometryDrawing.Brush
  >
                                <RadialGradientBrush
RadiusX="0.763034" RadiusY="0.592149" GradientOrigin="0.43784,0.434283" Center="0.43784,0.434283"
  >
                                    <RadialGradientBrush.RelativeTransform
  >
                                        <TransformGroup
 />
                                    </RadialGradientBrush.RelativeTransform>
                                    <GradientStop
Color="White" Offset="0"
 />
                                    <GradientStop
Color="#FFD5D5D5" Offset="1"
 />
                                </RadialGradientBrush>
                            </GeometryDrawing.Brush>
                            <GeometryDrawing.Pen
  >
                                <Pen
Brush="#FF7D2500" LineJoin="Round" Thickness="1.5"
 />
                            </GeometryDrawing.Pen>
                        </GeometryDrawing>
                        <GeometryDrawing
Geometry="F1M316.009,215.152C315.904,214.034 315.807,212.688 315.717,211.117 315.628,209.545 315.492,208.207 315.31,207.103 314.746,204.481 313.521,202.841 311.634,202.182 309.747,201.523 307.581,201.448 305.137,201.957 302.047,202.515 298.474,203.622 294.417,205.28 290.36,206.938 287.316,208.97 285.284,211.376 282.829,215.271 282.074,221.253 283.018,229.322 283.963,237.39 283.742,245.604 282.355,253.963 281.85,256.211 280.907,258.622 279.528,261.196 278.149,263.77 276.188,265.389 273.644,266.053 270.406,266.024 268.58,263.576 268.167,258.707 267.754,253.838 267.627,250.543 267.784,248.82 267.778,244.191 267.77,238.825 267.759,232.721 267.749,226.616 267.478,221.845 266.946,218.407 266.438,215.456 265.421,213.328 263.895,212.023 262.37,210.717 260.11,210.338 257.116,210.884 252.818,211.727 248.6,213.161 244.46,215.184 240.32,217.208 236.468,219.517 232.904,222.11 230.485,223.722 227.96,225.928 225.329,228.728 222.698,231.527 221.545,234.544 221.87,237.779 222.318,239.753 223.263,240.917 224.704,241.272 226.145,241.626 227.694,241.693 229.352,241.474 231.865,241.39 233.35,242.112 233.807,243.64 234.265,245.168 234.5,247.025 234.512,249.21 234.799,254.964 234.906,260.829 234.83,266.807 234.755,272.784 235.122,277.876 235.93,282.081 238.243,292.267 243.911,296.768 252.933,295.585 261.235,293.719 268.01,290.113 273.258,284.77 278.506,279.426 282.029,276.263 283.828,275.282 286.217,275.444 287.91,277.556 288.905,281.618 289.9,285.68 292.711,287.584 297.339,287.331 302.878,286.191 309.544,283.004 317.337,277.771 325.129,272.538 328.912,266.875 328.686,260.78 328.334,258.91 327.663,257.87 326.674,257.659 325.685,257.449 324.301,257.518 322.52,257.868 319.433,258.634 317.556,257.37 316.891,254.076 316.516,251.63 316.371,249.141 316.456,246.61L316.009,215.152z"
  >
                            <GeometryDrawing.Brush
  >
                                <RadialGradientBrush
RadiusX="0.592287" RadiusY="0.672395" GradientOrigin="0.450544,0.443124" Center="0.450544,0.443124"
  >
                                    <RadialGradientBrush.RelativeTransform
  >
                                        <TransformGroup
 />
                                    </RadialGradientBrush.RelativeTransform>
                                    <GradientStop
Color="White" Offset="0"
 />
                                    <GradientStop
Color="#FFD5D5D5" Offset="1"
 />
                                </RadialGradientBrush>
                            </GeometryDrawing.Brush>
                            <GeometryDrawing.Pen
  >
                                <Pen
Brush="#FF7D2500" LineJoin="Round" Thickness="1.5"
 />
                            </GeometryDrawing.Pen>
                        </GeometryDrawing>
                        <GeometryDrawing Geometry="F1M390.536,231.561C390.61,235.893 390.615,240.493 390.549,245.362 390.484,250.231 390.789,254.734 391.466,258.872 392.165,262.42 393.661,264.889 395.953,266.279 398.245,267.669 401.107,268.044 404.537,267.403 409.715,266.396 415.876,263.581 423.02,258.957 430.165,254.333 433.592,249.041 433.303,243.079 432.496,240.479 430.984,239.308 428.767,239.566 426.55,239.825 425.031,238.615 424.209,235.935 423.471,230.697 423.192,224.119 423.372,216.201 423.552,208.284 423.238,201.522 422.432,195.915 421.336,191 418.81,187.567 414.856,185.617 410.901,183.668 406.598,183.115 401.947,183.961 395.181,185.825 389.428,189.321 384.689,194.449 379.949,199.577 376.573,202.631 374.56,203.612 372.502,203.388 370.959,201.248 369.928,197.193 368.898,193.138 366.181,191.216 361.778,191.428 357.74,192.299 353.059,194.169 347.734,197.037 342.409,199.906 338.148,202.731 334.951,205.515 333.293,206.824 331.769,208.414 330.377,210.285 328.986,212.156 328.422,214.127 328.686,216.198 329.14,219.22 330.887,220.498 333.929,220.033L335.493,219.742C338.605,219.226 340.367,220.578 340.777,223.798 342.08,231.227 342.56,239.72 342.216,249.276 341.873,258.831 341.963,265.883 342.488,270.431 343.245,273.814 344.868,275.87 347.356,276.6 349.845,277.329 352.537,277.307 355.433,276.531 365.147,274.374 371.348,271.429 374.035,267.695 376.721,263.961 377.512,257.809 376.408,249.238 375.659,243.56 375.479,236.538 375.867,228.173 376.254,219.808 379.136,214.712 384.512,212.885 385.98,212.646 387.156,212.932 388.041,213.743 388.927,214.554 389.503,215.687 389.77,217.144L390.536,231.561z">
                            <GeometryDrawing.Brush>
                                <RadialGradientBrush RadiusX="0.592402" RadiusY="0.66297" GradientOrigin="0.449238,0.438522" Center="0.449238,0.438522">
                                    <RadialGradientBrush.RelativeTransform>
                                        <TransformGroup/>
                                    </RadialGradientBrush.RelativeTransform>
                                    <GradientStop Color="White" Offset="0"/>
                                    <GradientStop Color="#FFD5D5D5" Offset="1"/>
                                </RadialGradientBrush>
                            </GeometryDrawing.Brush>
                            <GeometryDrawing.Pen>
                                <Pen Brush="#FF7D2500" LineJoin="Round" Thickness="1.5"/>
                            </GeometryDrawing.Pen>
                        </GeometryDrawing>
                        <GeometryDrawing Geometry="F1M483.77,222.366C488.381,218.525 492.426,217.778 495.904,220.123 499.381,222.467 500.823,225.646 500.229,229.657 499.635,233.669 497.298,237.213 493.219,240.288 489.139,243.364 485.293,244.201 481.679,242.8 478.065,241.399 476.357,238.603 476.555,234.412 476.754,230.221 479.158,226.206 483.77,222.366z M511.055,144.366C510,148.842 507.063,161.261 502.245,181.621 497.427,201.98 493.841,212.379 491.487,212.817 489.133,213.254 488.412,203.639 489.322,183.972 490.233,164.305 490.945,152.085 491.456,147.314 491.968,142.542 494.322,138.591 498.517,135.46 502.713,132.329 506.115,131.908 508.722,134.195 511.33,136.483 512.107,139.873 511.055,144.366z">
                            <GeometryDrawing.Brush>
                                <RadialGradientBrush RadiusX="1.89231" RadiusY="0.597705" GradientOrigin="0.451968,0.411473" Center="0.451968,0.411473">
                                    <RadialGradientBrush.RelativeTransform>
                                        <TransformGroup/>
                                    </RadialGradientBrush.RelativeTransform>
                                    <GradientStop Color="White" Offset="0" />
                                    <GradientStop Color="#FFD5D5D5" Offset="1" />
                                </RadialGradientBrush>
                            </GeometryDrawing.Brush>
                            <GeometryDrawing.Pen >
                                <Pen Brush="#FF7D2500" LineJoin="Round" Thickness="1.5" />
                            </GeometryDrawing.Pen>
                        </GeometryDrawing>
                    </DrawingGroup>
                </DrawingBrush.Drawing>
            </DrawingBrush>
        </Ellipse.Fill>
    </Ellipse>

这里使用 矢量图和位图来填充。

总结一下:
WPF的画刷与GDI+中的画刷相比,有很大的进步,功能更强大了。WPF新增了DrawingBrush图画绘制画刷(包括矢量图和位图),而VisualBrush是以可视化的控件作为画刷,WPF新增了一个镭射渐变画刷RadialGradientBrush。需要指出的是,WPF中多数显示效果都使用硬件(显示)的运算能力而不是软件来展现,这都得益于DirectX 9/10的相关技术。

GDI与DirectX

GDI 属于硬件和系统之间的抽象层,既保护了存储系统也方便了开发者,防止程序员直接操作显存引致错误(比如蓝屏),在DOS时代,程序员是可以直接操纵内存、显存等一系列硬件。。。GDI带来的问题就是效率!程序员间接调用gdi32.dll中的接口进行窗口的绘制,数据从显存到内存这之间的一系列数据交换带来的是效率的下降。。。

 

directx 是微软开发的,多媒体编程套件,他既做到了GDI的设备无关性也在效率上超过了OpenGL,还提供了更多的功能。用来对抗OpenGL以及拉拢游戏开发商,并推广自己的xbox产品 。。。至于他为什么比opengl做的更好,我也没有深入了解,但是可以肯定的是,他的绘图效率绝对比GDI高多了,我想大概的原因,就是微软做了折中处理,既是直接操作显存,同时还提供程序员抽象的编程模型。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值