WPF特效-绘图

简介: 原文:WPF特效-绘图              WPF玩起来还是挺炫酷的。我实现的效果:不同色块交叉,交叉部分颜色叠加显示。
原文: WPF特效-绘图

 

 

    

 



      WPF玩起来还是挺炫酷的。我实现的效果:不同色块交叉,交叉部分颜色叠加显示。(叠加部分暂时用随机颜色代替)。单独色块点击弹出以色块颜色为主的附属面板。踩了一些坑,从简单一步步完善。

      判断是否交叉,并创建交叉区域的算法比较费事。

      完整过程代码较复杂,算法也从初始简单到复杂再到简单。

      交汇区域:  主要使用Path绘制,根据色块获取交汇区域的Intersect geometry获得。  

      判断交叉:实现了可判断任意多个色块交叉,并绘制出所有叠加区域的算法,但是色块越多,判断过程越占用资源。造成程序卡顿。最终修改为最多三个色块可进行叠加组合。

      算法描述起来比较复杂,可复用性不高,就不费文字阐述了。

      最后一个模块比较有趣,仅用简单的Ellipse, Rectangle,Line等教简单的Shape即可随意绘制出炫酷的UI效果,部分源码如下:

 <Ellipse x:Name="EllipseLoadZm" Stroke="{Binding Path=Brush}" StrokeThickness="60" Margin="-98"
                 StrokeDashArray="0.4 0.12" StrokeDashCap="Flat" 
                 RenderTransformOrigin="0.5,0.5">
            <Ellipse.RenderTransform>
                <TransformGroup>
                    <ScaleTransform/>
                    <SkewTransform/>
                    <RotateTransform/>
                    <TranslateTransform/>
                </TransformGroup>
            </Ellipse.RenderTransform>
            <Ellipse.OpacityMask>
                <RadialGradientBrush>
                    <GradientStop Color="#33FFFFFF" Offset="0.466"/>
                    <GradientStop Color="#FFFBFBFB" Offset="0.871"/>
                    <GradientStop Color="Transparent" Offset="1"/>
                    <GradientStop Color="#4EFFFFFF" Offset="0.778"/>
                    <GradientStop Color="#FFF1EDED" Offset="0.281"/>
                    <GradientStop Color="#19FFFFFF" Offset="0.003"/>
                </RadialGradientBrush>
            </Ellipse.OpacityMask>
        </Ellipse>

        <Grid Margin="-818,-99,0,-99" HorizontalAlignment="Left" 
              Width="927" RenderTransformOrigin="1,0.5">
            <Path HorizontalAlignment="Right" 
                  Data="{StaticResource KeyPathDataColorDescript}">
                <Path.Fill>
                    <LinearGradientBrush StartPoint="0,0.5" EndPoint="1,0.5" >
                        <GradientStop Color="{Binding Path=Fill}"/>
                        <GradientStop Color="Transparent" Offset="1"/>
                    </LinearGradientBrush>
                </Path.Fill>
            </Path>
            <Line Y2="418" StrokeThickness="25" StrokeDashArray="1 0.2">
                <Line.Stroke>
                    <LinearGradientBrush EndPoint="0.5,1.2" StartPoint="0.5,0">
                        <GradientStop Color="{Binding Path=Fill}" Offset="0"/>
                        <GradientStop Color="Transparent" Offset="1"/>
                    </LinearGradientBrush>
                </Line.Stroke>
            </Line>
            <Canvas Margin="21,0,206,0" >
                <Canvas.Background>
                    <SolidColorBrush Color="{Binding Path=Fill}" Opacity="0.3"/>
                </Canvas.Background>
            </Canvas>
        </Grid>
  <CombinedGeometry x:Key="KeyPathDataColorDescript" GeometryCombineMode="Exclude">
            <CombinedGeometry.Geometry1>
                <CombinedGeometry GeometryCombineMode="Intersect">
                    <CombinedGeometry.Geometry1>
                        <RectangleGeometry Rect="0,0,200,418">
                            <RectangleGeometry.Transform>
                                <TransformGroup>
                                    <ScaleTransform/>
                                    <SkewTransform AngleY="18"/>
                                    <RotateTransform />
                                    <TranslateTransform />
                                </TransformGroup>
                            </RectangleGeometry.Transform>
                        </RectangleGeometry>
                    </CombinedGeometry.Geometry1>
                    <CombinedGeometry.Geometry2>
                        <RectangleGeometry Rect="0,0,200,418">
                            <RectangleGeometry.Transform>
                                <TransformGroup>
                                    <ScaleTransform/>
                                    <SkewTransform AngleY="-18"/>
                                    <RotateTransform />
                                    <TranslateTransform />
                                </TransformGroup>
                            </RectangleGeometry.Transform>
                        </RectangleGeometry>
                    </CombinedGeometry.Geometry2>
                </CombinedGeometry>
            </CombinedGeometry.Geometry1>
            <CombinedGeometry.Geometry2>
                <EllipseGeometry RadiusX="145" RadiusY="145"
                                                 Center="195,209"/>
            </CombinedGeometry.Geometry2>
        </CombinedGeometry>
目录
相关文章
|
C# Windows
WPF绘图
添加一个绘图面板项目按右键添加类DrawingPanel using System; using System.Collections.Generic; using System.Linq; using System.
1343 0
|
C# 算法 前端开发
WPF: RenderTransform特效
原文:WPF: RenderTransform特效 WPF中的变形(RenderTransform)类是为了达到直接去改变某个Silverlight对象的形状(比如缩放、旋转一个元素)的目的而设计的,RenderTransform包含的变形属性成员就是专门用来改变Silverlight对象形状的,它可以实现对元素拉伸,旋转,扭曲等效果,同时变形特效也常用于辅助产生各种动画效果。
1337 0
|
C#
WPF 用Clip属性实现蒙板特效
原文:WPF 用Clip属性实现蒙板特效 上一篇,已简单介绍Clip属性的用法,这一篇用它来实现简单蒙板功能,很简单,直接上代码                                ...
1587 0
|
C#
WPF 呼吸灯特效
原文:WPF 呼吸灯特效 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014117094/article/details/46738621 ...
2266 0
|
C# 内存技术
好玩的WPF第二弹:电子表字体显示时间+多彩呼吸灯特效按钮
原文:好玩的WPF第二弹:电子表字体显示时间+多彩呼吸灯特效按钮 版权声明:转载请联系本人,感谢配合!本站地址:http://blog.csdn.net/nomasp https://blog.csdn.net/NoMasp/article/details/46457923 我们先来看看Quartz MS字体动态显示系统时间的效果,难度相较于上一篇也要简单许多。
1852 0
|
C#
WPF里的一些Effect特效
原文:WPF里的一些Effect特效 Blend的特效都在Microsoft.Expression.Media.Effects里,用之前添加一下引用。
1367 0
|
C# Windows
WPF和Expression Blend开发实例:模拟QQ登陆界面打开和关闭特效
原文:WPF和Expression Blend开发实例:模拟QQ登陆界面打开和关闭特效 不管在消费者的心中腾讯是一个怎么样的模仿者抄袭者的形象,但是腾讯在软件交互上的设计一直是一流的.正如某位已故的知名产品经理所说的:设计并非外观怎样,感觉如何.
1215 0
|
C#
WPF特效-实现3D足球效果
原文:WPF特效-实现3D足球效果 WPF 实现 3D足球效果,效果图如下:  每个面加载不同贴图。                                                          ...
860 0