Silverlight形状、画笔、变换、图像处理、几何图形

时间:2023-03-09 08:19:51
Silverlight形状、画笔、变换、图像处理、几何图形

1.形状(Ellipse、Line、Path、Polygon、Polyline 和 Rectangle)

 <UserControl x:Class="SharpStudy.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="" d:DesignWidth=""> <!--
Sharp相关知识
()Shape 是一种允许您在屏幕中绘制形状的 UIElement 类型。由于它们是用户界面 (UI) 元素,因此 Shape 对象可以在各种容器对象(如 Grid 和 Canvas)中使用
()Shape对象包括: Ellipse、Line、Path、Polygon、Polyline 和 Rectangle
()公用属性:
Stroke :说明如何绘制形状的轮廓。
StrokeThickness :说明形状轮廓的粗细。
Fill :说明如何绘制形状的内部。
用于指定坐标和顶点的数据属性,以与设备无关的像素来度量。
()虽然 Line 类提供了 Fill 属性,但设置该属性无效,因为 Line 没有区域。
()画笔属性的有效输入可以是关键字或十六进制颜色值
()用属性元素语法显式创建一个 SolidColorBrush 对象 -->
<Canvas Width="" Height="" Background="LightGray">
<Ellipse
Canvas.Top=""
Canvas.Left=""
Fill="#FFFFFF00"
Height=""
Width=""
StrokeThickness=""
Stroke="#FF0000FF"
/>
</Canvas>
<!--
用属性元素语法显式创建一个 SolidColorBrush 对象
<Canvas>
<Polygon
Points="300,200 400,125 400,275 300,200"
Stroke="Purple"
StrokeThickness="">
<Polygon.Fill>
<SolidColorBrush Color="Blue" Opacity="0.4"/>
</Polygon.Fill>
</Polygon> </Canvas>
-->
</UserControl>

2.画笔:(SolidColorBrush(纯色画笔 )、LinearGradientBrush(线性渐变画笔)、RadialGradientBrush(径向渐变画笔)、ImageBrush(图像画笔)、VideoBrush(视频画笔))

 <UserControl x:Class="SharpStudy.BrushDemo"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="" d:DesignWidth=""> <!--
(一) 画笔作用: 可以使用 Silverlight 画笔对象以纯色、线性渐变、径向渐变和图像进行绘制
(二) 画笔分类:
()SolidColorBrush(纯色画笔 )
()LinearGradientBrush(线性渐变画笔):使用沿一条直线(即"渐变轴")定义的渐变来绘制区域 ,渐变轴是一条直线
渐变停止点(GradientStop):描述渐变中过渡点的位置(Offset)和颜色(Color)。
渐变停止点的 Color 属性指定渐变停止点的颜色
渐变停止点的 Offset 属性指定渐变停止点的颜色在渐变轴上的位置。偏移量是一个范围从 至 的 Double 值。
由于渐变停止点不提供 opacity 属性,因此必须使用 ARGB 十六进制表示法或 ScRGB 表示法来指定颜色的 alpha 通道,
以创建透明或部分透明的渐变停止点(例如:<GradientStop Color="#200000FF" Offset="0.0" />)
渐变轴:线性渐变画笔的渐变停止点位于一条直线上,这条线就是渐变轴
StartPoint 和 EndPoint 属性更改直线的方向和大小,
通过操作画笔的 StartPoint 和 EndPoint,可以创建水平和垂直渐变、反转渐变方向以及压缩渐变的范围等
默认情况点 (,) 表示绘制区域的左上角,(,) 表示绘制区域的右下角,你可以调整两个点如(0.5,0.7)和(0.4,0.8)
()RadialGradientBrush(径向渐变画笔):渐变轴由一个圆圈定义,其颜色从圆圈的原点向外辐射。
GradientOrigin 指定径向渐变画笔的渐变轴的起点。渐变轴从渐变原点辐射至渐变圆。
画笔的渐变圆由其 Center、RadiusX 和 RadiusY 属性定义。
()ImageBrush(图像画笔) :持您将图像用作填充、背景和轮廓
ImageSource属性:指定的JPEG或PNG图像
Stretch 属性: Fill(默认) None、Uniform 、UniformToFill 来更改绘制的区域行为。
()VideoBrush(视频画笔): 使用视频绘制一个区域
由于 VideoBrush 依赖 MediaElement 对象来提供视频流,您应该了解如何创建 MediaElement 并使用它打开媒体文件
若要使用视频绘制一个区域,需要创建一个 MediaElement 和一个 VideoBrush,并将该 VideoBrush 应用到要绘制的对象
IsMuted属性:获取或设置一个值,该值指示是否已静音
SourceName属性 :提供画笔视频的 MediaElement 的名称。 -->
<StackPanel>
<!--线性渐变画笔-->
<Rectangle Width="" Height="">
<Rectangle.Fill>
<LinearGradientBrush StartPoint="0,0.5" EndPoint="1,0.5">
<GradientStop Color="Yellow" Offset="0.0" />
<GradientStop Color="Red" Offset="0.25" />
<GradientStop Color="Blue" Offset="0.75" />
<GradientStop Color="LimeGreen" Offset="1.0" />
</LinearGradientBrush>
</Rectangle.Fill>
</Rectangle>
<!--径向渐变画笔-->
<Rectangle Width="" Height="">
<Rectangle.Fill>
<RadialGradientBrush GradientOrigin="0.5,0.5" Center="0.5,0.5" RadiusX="0.5" RadiusY="0.5">
<GradientStop Color="Yellow" Offset="" />
<GradientStop Color="Red" Offset="0.25" />
<GradientStop Color="Blue" Offset="0.75" />
<GradientStop Color="LimeGreen" Offset="" />
</RadialGradientBrush>
</Rectangle.Fill>
</Rectangle>
<!--图像画笔-->
<Rectangle Width="" Height="">
<Rectangle.Fill>
<ImageBrush ImageSource="/SharpStudy;component/Transformer.png" Stretch="UniformToFill"/>
</Rectangle.Fill>
</Rectangle>
<!--视频画笔-->
<Canvas>
<MediaElement x:Name="butterflyMediaElement" Source="Wildlife.wmv" IsMuted="True" Opacity="0.0" IsHitTestVisible="False" />
<TextBlock Canvas.Left="" Canvas.Top="" FontFamily="Verdana" FontSize="" FontWeight="Bold" TextWrapping="Wrap" Text="Video" >
<TextBlock.Foreground>
<VideoBrush SourceName="butterflyMediaElement" Stretch="Fill" />
</TextBlock.Foreground>
</TextBlock>
</Canvas>
</StackPanel>
</UserControl>

3.变换:RotateTransform(旋转)、ScaleTransform(缩放)、SkewTransform(倾斜)、TranslateTransform(平移)、CompositeTransform(通用变换)、TransformGroup(类似通用变换)、MatrixTransform(矩阵)

 <UserControl x:Class="GeometryStudy.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="" d:DesignWidth="" xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk">
<!--
(一)()Silverlight 中使用二维 (-D) Transform 类来旋转、按比例缩放、扭曲和移动(平移)对象
()Transform定义如何将一个坐标空间中的点映射或变换到另一个坐标空间。此映射由变换 Matrix(一个三行三列的 Double 值集合)
(二)变换的分类:
简单变换:
()RotateTransform变换:按指定的 Angle 旋转元素
()ScaleTransform变换:按指定的 ScaleX 和 ScaleY 量按比例缩放元素
()SkewTransform变换:按指定的 AngleX 和 AngleY 量扭曲元素。
()TranslateTransform:按指定的 X 和 Y 量移动(平移)元素。
复杂变换:
()CompositeTransform:使用此类对同一对象应用多个变换(如扭曲和旋转)。此类以首选顺序应用多个变换
()TransformGroup :与CompositeTransform类似,但以特定顺序应用变换,或者希望为不同变换应用不同的中心点
()MatrixTransform :提供的自定义变换,直接处理矩阵
(三)常见变换属性
()Brush类可以进行 Transform ,RelativeTransform变换
()Geometry 可以Transform
()UIElement可以RenderTransform
--> <Grid x:Name="LayoutRoot" Background="White">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
</Grid.RowDefinitions> <StackPanel Grid.Row="">
<!--以顶点作为旋转点旋转45度-->
<Rectangle Width="" Height="" Fill="RoyalBlue" Margin="0,0,0,20">
<Rectangle.RenderTransform>
<RotateTransform Angle="" />
</Rectangle.RenderTransform>
</Rectangle>
<!--正方形中心作为旋转点旋转45度-->
<Rectangle Width="" Height="" Fill="RoyalBlue">
<Rectangle.RenderTransform>
<RotateTransform Angle="" CenterX="" CenterY="" />
</Rectangle.RenderTransform>
</Rectangle>
</StackPanel>
<!--旋转动画-->
<StackPanel Grid.Row="" >
<StackPanel.Resources>
<Storyboard x:Name="myStoryboard">
<DoubleAnimation
Storyboard.TargetName="myTransform"
Storyboard.TargetProperty="Angle"
From="" To="" Duration="0:0:5"
RepeatBehavior="Forever"
/>
</Storyboard>
</StackPanel.Resources>
<Rectangle Width="" Height="" Fill="RoyalBlue" MouseLeftButtonDown="StartAnimation">
<Rectangle.RenderTransform>
<RotateTransform x:Name="myTransform" Angle="" CenterX="" CenterY="" />
</Rectangle.RenderTransform>
</Rectangle>
</StackPanel>
</Grid>
</UserControl>

4.图形:Clip(裁切)、OpacityMask(透明遮罩)、ImageBrush(图形画刷)、DeepZoom

 <UserControl x:Class="ImageDemo.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="" d:DesignWidth="" FontFamily="Comic Sans MS"> <!--
图像处理
(一)裁切图像
()可以通过使用 Clip 属性裁切掉图像输出的某个区域来裁切图像
(二)透明遮罩
OpacityMask(透明遮罩):获取或设置用于改变此对象区域的不透明度的画笔。根据渐变画刷的范围产生渐变透明效果
(三)使用mageBrush 来使用图像绘制采用画笔的区域
(四)DeepZoom:实现对大型图像或高分辨率图像的集合的缩放和平移
()探究非常大或高分辨率图像
()三维摄影:拍摄某一房间的照片,连续拍摄将创建构成该房间的 度画面的照片的集合
()广告:您可以创建分辨率相对较低的图像以表达广告的整个主题,然后,逐渐增加更高分辨率的图像以容纳加深用户印象的效果以及与产品有关的数据。
(五)WriteableBitmap:使用 WriteableBitmap 类基于每个框架来更新和呈现位图
-->
<Grid x:Name="LayoutRoot" Background="White">
<StackPanel>
<!--裁剪-->
<Image Width="" Height="" Source="/ImageDemo;component/WelcomeScan.jpg">
<Image.Clip>
<EllipseGeometry RadiusX="" RadiusY="" Center="100,75"/>
</Image.Clip>
</Image>
<!--透明遮罩(另一种裁剪方法)-->
<Image Source="/ImageDemo;component/WelcomeScan.jpg" Stretch="None" Width="" Height="">
<Image.OpacityMask >
<!--使用放射性渐变画刷-->
<RadialGradientBrush Center="200,100" GradientOrigin="200,100" MappingMode="Absolute" RadiusX="" RadiusY="">
<GradientStop Color="#00000000" Offset="" />
<GradientStop Color="#FF000000" Offset="" />
</RadialGradientBrush>
</Image.OpacityMask>
</Image> <!--
使用mageBrush 来使用图像绘制采用画笔的区域
ImageBrush 可用于 Canvas 或 InkPresenter 的 Background 属性的值
下面的 XAML 示例显示如何将 Foreground 属性设置为 ImageBrush,其图像将用作 TextBlock 呈现文本的填充。
-->
<TextBlock FontFamily="Verdana" FontSize="" HorizontalAlignment="Center" FontStyle="Normal" FontWeight="Bold" Text="Sililverlight图像学习">
<TextBlock.Foreground>
<ImageBrush ImageSource="/ImageDemo;component/WelcomeScan.jpg"/>
</TextBlock.Foreground>
</TextBlock>
</StackPanel>
</Grid> </UserControl>

5.几何图形:LineGeometry(线条)RectangleGeometry(矩形)EllipseGeometry(圆形)、PathGeometry(路径几何图形)、GeometryGroup(复合几何图形)

 <UserControl x:Class="SharpStudy.GeometryDemo"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="" d:DesignWidth="">
<!-- (一)Geometry 对象可以用于描绘二维 (-D) 形状的几何图形
(二)Geometry 与 Shape 的比较
()相似点:描绘二维形状
()不同点:
Shape对象是UIElement(所以具有UIElement具有的 Opacity、OpacityMask等属性)
通过使用 Geometry 设置 Path 的 Data 属性以及设置它的 Fill 和 Stroke 属性,可以呈现 Geometry。
(三)Geometry 对象分类:
简单几何图形:
()LineGeometry:过指定直线的起点(StartPoint)和终点(EndPoint)来定义
()RectangleGeometry 通过使用 Rect 结构来定义。RadiusX 和 RadiusY 属性来创建圆角矩形。
()EllipseGeometry 通过中心点(Center)、x 半径( RadiusX)和 y 半径(RadiusY)来定义。
路径几何图形:PathGeometry 对象和几何图形 mini-language 提供了描绘由弧线、曲线和直线组成的多个复杂图形的方法。 复合几何图形:可以使用 GeometryGroup 对象来创建复合几何图形对象。GeometryGroup 创建它所包含的 Geometry 对象的组合体,但不合并其面积 -->
<StackPanel Orientation="Horizontal">
<!--简单几何图形-->
<!--LineGeometry-->
<Canvas>
<Path Stroke="Black" StrokeThickness="" >
<Path.Data>
<LineGeometry StartPoint="10,20" EndPoint="100,130" />
</Path.Data>
</Path>
</Canvas>
<!--EllipseGeometry-->
<Canvas>
<Path Fill="Gold" Stroke="Black" StrokeThickness="">
<Path.Data>
<EllipseGeometry Center="50,50" RadiusX="" RadiusY="" />
</Path.Data>
</Path>
</Canvas>
<!--RectangleGeometry-->
<Canvas>
<Path Fill="LemonChiffon" Stroke="Black" StrokeThickness="">
<Path.Data>
<RectangleGeometry Rect="50,50,25,25" RadiusX="" RadiusY="" />
</Path.Data>
</Path>
</Canvas> <!--
路径几何图形
()PathGeometry 的核心是 PathFigure 对象的集合;这些对象之所以这样命名是因为每个图形都描绘 PathGeometry 中的一个离散形状
() 每个 PathFigure 自身又由一个或多个 PathSegment 对象组成,每个这样的对象均描绘图形的一条线段。
()路径标记语法:Geometry 对象支持使用一系列特殊的移动和绘制命令的 XAML 属性语法
-->
<Canvas>
<Path Stroke="Black" StrokeThickness="">
<Path.Data>
<PathGeometry>
<PathGeometry.Figures>
<PathFigure StartPoint="10,20">
<PathFigure.Segments>
<LineSegment Point="100,130"/>
</PathFigure.Segments>
</PathFigure>
</PathGeometry.Figures>
</PathGeometry>
</Path.Data>
</Path>
</Canvas>
<!--
复合几何图形
-->
<Canvas>
<Path Stroke="Black" StrokeThickness="" Fill="#CCCCFF">
<Path.Data> <!-- Creates a composite shape from three geometries. -->
<GeometryGroup FillRule="EvenOdd">
<LineGeometry StartPoint="10,10" EndPoint="50,30" />
<EllipseGeometry Center="40,70" RadiusX="" RadiusY="" />
<RectangleGeometry Rect="30,55 100 30" />
</GeometryGroup>
</Path.Data>
</Path>
</Canvas> </StackPanel>
</UserControl>