第30课 使用Transform实现更炫的效果(下)

news/2024/7/21 7:11:04 标签: silverlight, image, matrix, object, 图像处理, 图形

 

概述

本文为使用Transform实现更炫的效果第二部分,在Silverlight中提供了四种基本变换:旋转变换(RotateTransform )、缩放变换(ScaleTransform)、倾斜变换(SkewTransform)、移动变换(TranslateTransform)和两种复杂的变换:变换组(TransformGroup)、矩阵变换(MatrixTransform ),这些变换可以运用到任何控件或者图形图像。

矩阵变换(MatrixTransform )

矩阵变换MatrixTransform是所有变换中功能最强大最灵活也是最复杂的一种变换,如果前面讲解的几种基本变化不能满足我们在实际开发中的需求,可以使用矩阵变换进行自定义,它允许我们直接对变换矩阵进行操作。

在Silverlight中,变换是提供一个3*3的矩阵,我们通过修改矩阵中成员的值来实现变换,矩阵的定义如下所示:

TerryLee_Silverlight2_0148images.cnblogs.com/cnblogs_com/Terrylee/WindowsLiveWriter/Silverlight230Transform_13FAC/TerryLee_Silverlight2_0148_3.png" width="586" border="0" />

如修改OffsetX,元素将会在X轴上进行移动;修改OffsetY,元素将在Y轴上移动;修改M22为2,元素的高度将会拉伸2倍,通过该矩阵,我们能实现前面提到的几种基本变换的所有功能。更详细的解释大家可以参考SDK。如下面的例子,我们使用矩阵变换,仍然能实现前面示例中的变换效果:

<Canvas Background="#CDFCAE">
    <Image Source="a1.png" Canvas.Left="120" Canvas.Top="50" Opacity="0.3">
    
          Image>
    <Image Source="a1.png" Canvas.Left="120" Canvas.Top="50" Opacity="0.5">
        <Image.RenderTransform>
            <MatrixTransform>
                <MatrixTransform.Matrix>
                    <Matrix OffsetX="0" OffsetY="0" M12="0.2">
           Matrix>
                
            MatrixTransform.Matrix>
            
             MatrixTransform>
        
              Image.RenderTransform> 
               Image> <Image Source="a1.png" Canvas.Left="120" Canvas.Top="50"> <Image.RenderTransform> <MatrixTransform> <MatrixTransform.Matrix> <Matrix OffsetX="0" OffsetY="0" M12="0.4">
                Matrix> 
                 MatrixTransform.Matrix> 
                  MatrixTransform> 
                   Image.RenderTransform> 
                    Image> 
                     Canvas>

运行后效果如下:

TerryLee_Silverlight2_0149images.cnblogs.com/cnblogs_com/Terrylee/WindowsLiveWriter/Silverlight230Transform_13FAC/TerryLee_Silverlight2_0149_6.png" width="648" border="0" />  

实现动画变换

Transform与Silverlight中的Storyboard结合,可以很容易的实现出动画变换的效果,如下面的例子,当鼠标放在上去的时候,图片开始旋转;鼠标离开时停止旋转:

<Canvas Background="#CDFCAE">
    <Canvas.Resources>
        <Storyboard x:Name="myStoryboard">
            <DoubleAnimation
          Storyboard.TargetName="myTransform"
          Storyboard.TargetProperty="Angle"
          From="0" To="180" Duration="0:0:5" RepeatBehavior="Forever" />
        
          Storyboard>
    
           Canvas.Resources>
    <Image x:Name="imgTarget" Source="a1.png" Canvas.Left="180" Canvas.Top="80"
           MouseEnter="imgTarget_MouseEnter" MouseLeave="imgTarget_MouseLeave">
        <Image.RenderTransform>
            <RotateTransform x:Name="myTransform" Angle="15" CenterX="120" CenterY="68" />
        
            Image.RenderTransform>
    
             Image>

              Canvas>

在代码中控制Storyboard:

private void imgTarget_MouseEnter(object sender, MouseEventArgs e)
{
    myStoryboard.Begin();
}

private void imgTarget_MouseLeave(object sender, MouseEventArgs e)
{
    myStoryboard.Stop();
}

运行后效果如下:

TerryLee_Silverlight2_0150images.cnblogs.com/cnblogs_com/Terrylee/WindowsLiveWriter/Silverlight230Transform_13FAC/TerryLee_Silverlight2_0150_3.png" width="649" border="0" />

当鼠标放上后将开始旋转:

TerryLee_Silverlight2_0151images.cnblogs.com/cnblogs_com/Terrylee/WindowsLiveWriter/Silverlight230Transform_13FAC/TerryLee_Silverlight2_0151_3.png" width="648" border="0" /> 

用代码控制变换

这个话题其实没什么好讲的,在后台代码中对Transform进行控制,如下面的例子,每次点击图片时,都让RotateTransform的角度增加15度:

<Canvas Background="#CDFCAE">
    <Image Source="a1.png" Canvas.Left="180" Canvas.Top="80" Opacity="0.3">
    
          Image>
    <Image x:Name="imgTarget" Source="a1.png" Canvas.Left="180" Canvas.Top="80"
           MouseLeftButtonDown="imgTarget_MouseLeftButtonDown">
        <Image.RenderTransform>
            <RotateTransform x:Name="myTransform" Angle="0" CenterX="120" CenterY="68" />
        
           Image.RenderTransform>
    
            Image>

             Canvas>

后台代码:

private void imgTarget_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    myTransform.Angle = myTransform.Angle + 15;
}

运行后起始界面如下:

TerryLee_Silverlight2_0152images.cnblogs.com/cnblogs_com/Terrylee/WindowsLiveWriter/Silverlight230Transform_13FAC/TerryLee_Silverlight2_0152_3.png" width="648" border="0" />

当单击之后将会旋转:

TerryLee_Silverlight2_0153images.cnblogs.com/cnblogs_com/Terrylee/WindowsLiveWriter/Silverlight230Transform_13FAC/TerryLee_Silverlight2_0153_3.png" width="649" border="0" /> 

结束语

本文为使用Transform实现更炫的效果第二部分,介绍了矩阵变换以及如何实现动画变换、在代码中控制变换,接下来我将会运用前面几篇关于图形图像处理的知识写一个综合实例。


http://www.niftyadmin.cn/n/1706650.html

相关文章

squid,nginx,lighttpd反向代理的区别(转)

反向代理从传输上分可以分为2种&#xff1a; 1&#xff1a;同步模式(apache-mod_proxy和squid) 2&#xff1a;异步模式(lighttpd 和 nginx) 在nginx的文档说明中&#xff0c;提到了异步传输模式并提到它可以减少后端连接数和压力&#xff0c;这是为何&#xff1f; 下面就来讲解…

对象类设计模式之访问者模式

本文纯属个人见解&#xff0c;是对前面学习的总结&#xff0c;如有描述不正确的地方还请高手指正~ 访问者模式是一种分离对象数据和行为的方法&#xff0c;通过这类分离&#xff0c;可认为一个已存在的类或类群增加新的操纵而不用更改他们的数据。 这个模式其实和迭代器模式在很…

MATLAB基础篇(上)

一、MATLAB简介 MATLAB(Matrix Laboratory, 即矩阵实验室)是MathWork公司推出的一套高效率的数值计算和可视化软件.MATLAB是当今科学界最具影响力、也是最具活力的软件, 它起源于矩阵运算, 并已经发展成一种高度集成的计算机语言.它提供了强大的科学运算、灵活的程序设计流程、…

第31课 图形图像综合实例:实现水中倒影效果

概述 本文将综合前面几篇关于图形图像处理的技术&#xff0c;如画刷、半透明遮罩、Transform等&#xff0c;实现一个水中倒影效果的示例。 Step 1&#xff1a;素材准备 最终我们实现的效果图将会如下所示&#xff1a; 先准备一张图片&#xff0c;这里我使用了一张液晶显示器的图…

下载verycd的方法下载电驴资源隐藏资源的最新可用方法

点评&#xff1a;自2012年8月30日之后&#xff0c;verycd上所有资源的ed2k下载链接均被隐藏。没有登录的会员会显示“该资源为版权方声明保护内容&#xff0c;VeryCD不提供其下载”的字样现在电驴也不让下载了&#xff0c;和以前的狗狗一样&#xff0c;资源都屏蔽了&#xff0c…

js版四叉树的算法解析和使用

//根据环境创建一棵树//比如你把屏幕当做根节点//每一个节点都会有容纳的最大目标物体&#xff0c;超过这个目标物体就会拆分四个节点//四叉树也会有深度的控制&#xff0c;就是从根节点到叶子结点的长度var quadTree Quadtree(bounds, max_objects, max_levels, level);//往这…

RMQ问题各种模板哈(对于我这样的大水B来说,模板多好~~~)

1 #include <iostream>2 #include <math.h>3 #include <cstdio>4 #define max(a,b) ((a)>(b)?(a):(b))5 #define min(a,b) ((a)<(b)?(a):(b))6 7 using namespace std;8 9 const int maxn50001; 10 int h[maxn]; 11 int mx[maxn][16],mn[…

第32课 图形图像综合实例:“功夫之王”剧照播放

概述 本文我们再实现一个图形图像实例——图片播放&#xff0c;并利用Storyboard实现一些动画效果。 今天我也当一回“标题当”:)&#xff0c;其实就是实现一个简单的图片播放器&#xff0c;跟“功夫之王”剧照半点关系也没有&#xff0c;只不过我上网找了几张即将播出的的电影…