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

news/2024/7/8 5:23:29 标签: 图形, image, 图像处理

 

概述

本文将综合前面几篇关于图形图像处理的技术,如画刷、半透明遮罩、Transform等,实现一个水中倒影效果的示例。

Step 1:素材准备

最终我们实现的效果图将会如下所示:

 TerryLee_Silverlight2_0155images.cnblogs.com/cnblogs_com/Terrylee/WindowsLiveWriter/Silverlight231_7F46/TerryLee_Silverlight2_0155_5.png" width="654" border="0" />

先准备一张图片,这里我使用了一张液晶显示器的图片:)

TerryLee_Silverlight2_0154images.cnblogs.com/cnblogs_com/Terrylee/WindowsLiveWriter/Silverlight231_7F46/TerryLee_Silverlight2_0154_3.png" width="235" border="0" />

Step 2:创建图片

首先我们创建一个图片,使用Image控件,并进行定位

<Canvas Background="#000000">
    <Image Canvas.Top="20" Canvas.Left="182" Source="a.png">
    
          Image>

           Canvas>

运行后应该看起来如下所示:

TerryLee_Silverlight2_0156images.cnblogs.com/cnblogs_com/Terrylee/WindowsLiveWriter/Silverlight231_7F46/TerryLee_Silverlight2_0156_6.png" width="648" border="0" /> 

Step 3:创建倒影

复制一张图片,使其位置与原始图片一样,然后我们使用ScaleTransform进行创建图片的倒影,这时图片已经翻转到了屏幕的外面,可以通过调节Canvas.Top进行调节,或者使用TranslateTransform:

<Canvas Background="#000000">
    <Image Canvas.Top="20" Canvas.Left="182" Source="a.png">
    
          Image>
    <Image Canvas.Top="20" Canvas.Left="182" Source="a.png" Opacity="0.4">
        <Image.RenderTransform>
            <TransformGroup>
                <ScaleTransform ScaleY="-1">
           ScaleTransform>
                <TranslateTransform Y="320">
            TranslateTransform>
            
             TransformGroup>
        
              Image.RenderTransform> 
               Image> 
                Canvas>

运行后看起来如下所示:

 TerryLee_Silverlight2_0157images.cnblogs.com/cnblogs_com/Terrylee/WindowsLiveWriter/Silverlight231_7F46/TerryLee_Silverlight2_0157_4.png" width="654" border="0" />

Step 4:半透明遮罩

利用我们在图片处理一文介绍过的OpacityMask属性实现半透明遮罩,使其看起来更加像倒影:)

<Canvas Background="#000000">
    <Image Canvas.Top="20" Canvas.Left="182" Source="a.png">
    
          Image>
    <Image Canvas.Top="20" Canvas.Left="182" Source="a.png">
        <Image.RenderTransform>
            <TransformGroup>
                <ScaleTransform ScaleY="-1">
           ScaleTransform>
                <TranslateTransform Y="320">
            TranslateTransform>
            
             TransformGroup>
        
              Image.RenderTransform> <Image.OpacityMask> <LinearGradientBrush StartPoint="0.5,1" EndPoint="0.5,0.0"> <GradientStop Offset="0.0" Color="#00000000" /> <GradientStop Offset="1.0" Color="#FF000000" /> 
               LinearGradientBrush> 
                Image.OpacityMask> 
                 Image> 
                  Canvas>

运行后效果如下,倒影图片显示出了淡出效果:

TerryLee_Silverlight2_0158images.cnblogs.com/cnblogs_com/Terrylee/WindowsLiveWriter/Silverlight231_7F46/TerryLee_Silverlight2_0158_4.png" width="655" border="0" />  

Step 5:进一步扭曲倒影

我们对倒影图片做进一步的扭曲,用ScaleTransform来实现,使其在Y轴上做一些缩小,从1修改为0.75,达到扭曲的效果,并重新调整位置:

<Canvas Background="#000000">
    <Image Canvas.Top="20" Canvas.Left="182" Source="a.png">
    
          Image>
    <Image Canvas.Top="20" Canvas.Left="182" Source="a.png">
        <Image.RenderTransform>
            <TransformGroup>
                <ScaleTransform ScaleY="-0.75">
           ScaleTransform>
                <TranslateTransform Y="280">
            TranslateTransform>
            
             TransformGroup>
        
              Image.RenderTransform> <Image.OpacityMask> <LinearGradientBrush StartPoint="0.5,0.0" EndPoint="0.5,1.0"> <GradientStop Offset="0.0" Color="#00000000" /> <GradientStop Offset="1.0" Color="#FF000000" /> 
               LinearGradientBrush> 
                Image.OpacityMask> 
                 Image> 
                  Canvas>

运行后效果如下:

TerryLee_Silverlight2_0159images.cnblogs.com/cnblogs_com/Terrylee/WindowsLiveWriter/Silverlight231_7F46/TerryLee_Silverlight2_0159_3.png" width="654" border="0" />

Step 6:斜化倒影

我们对倒影做进一步的斜化,而不是垂直倒影,使用SkewTransform来实现,并重新调整倒影位置:

<Canvas Background="#000000">
    <Image Canvas.Top="20" Canvas.Left="182" Source="a.png">
    
          Image>
    <Image Canvas.Top="20" Canvas.Left="182" Source="a.png">
        <Image.RenderTransform>
            <TransformGroup>
                <ScaleTransform ScaleY="-0.75">
           ScaleTransform>
                <SkewTransform AngleX="-15">
            SkewTransform>
                <TranslateTransform Y="280" X="-30">
             TranslateTransform>
            
              TransformGroup> 
               Image.RenderTransform> <Image.OpacityMask> <LinearGradientBrush StartPoint="0.5,0.0" EndPoint="0.5,1.0"> <GradientStop Offset="0.0" Color="#00000000" /> <GradientStop Offset="1.0" Color="#FF000000" /> 
                LinearGradientBrush> 
                 Image.OpacityMask> 
                  Image> 
                   Canvas>

运行后效果应该如下所示:

TerryLee_Silverlight2_0161images.cnblogs.com/cnblogs_com/Terrylee/WindowsLiveWriter/Silverlight231_7F46/TerryLee_Silverlight2_0161_3.png" width="654" border="0" /> 

Step 7:进一步淡化倒影

为了使倒影更加逼真,我们最后再对倒影做点修饰,进一步淡化倒影,调整倒影的Opacity属性。

<Canvas Background="#000000">
    <Image Canvas.Top="20" Canvas.Left="182" Source="a.png">
    
          Image>
    <Image Canvas.Top="20" Canvas.Left="182" Source="a.png" Opacity="0.4">
        <Image.RenderTransform>
            <TransformGroup>
                <ScaleTransform ScaleY="-0.75">
           ScaleTransform>
                <SkewTransform AngleX="-15">
            SkewTransform>
                <TranslateTransform Y="280" X="-30">
             TranslateTransform>
            
              TransformGroup> 
               Image.RenderTransform> <Image.OpacityMask> <LinearGradientBrush StartPoint="0.5,0.0" EndPoint="0.5,1.0"> <GradientStop Offset="0.0" Color="#00000000" /> <GradientStop Offset="1.0" Color="#FF000000" /> 
                LinearGradientBrush> 
                 Image.OpacityMask> 
                  Image> 
                   Canvas>

最后运行后整体效果如下所示:

TerryLee_Silverlight2_0155images.cnblogs.com/cnblogs_com/Terrylee/WindowsLiveWriter/Silverlight231_7F46/TerryLee_Silverlight2_0155_5.png" width="654" border="0" /> 

这样就完成了一个水中倒影的示例,大家可以充分发挥自己的创意,做出更炫更酷的效果。

结束语

本文综合运用前面几篇关于图形图像处理的技术,包括画刷、半透明遮罩、以及几种基本的Transform做了一个简单的水中倒影示例,你可以从这里下载本文示例代码。


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

相关文章

下载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;只不过我上网找了几张即将播出的的电影…

Linux下查看进程打开的文件与打开文件的进程

有许多情况下&#xff0c;我们需要查看一个进程当前打开了哪些文件&#xff0c;反过来我们也希望知道某一个文件正在被哪些进程所读写。在Linux下有许多有用的工具可以帮我们完成这两个工作&#xff0c;下面介绍这两个工具&#xff1a;lsof与fuser。 fuser find files or socke…

计算机装机报告答辩,科技作品答辩稿段落概谈

原标题&#xff1a;科技作品答辩稿段落概谈近期&#xff0c;青少年科技创新大赛的地区赛在各省市拉开序幕&#xff0c;科技作品答辩是比赛的重要一部分。林宇和高凯老师整理了科技作品答辩的九个段落&#xff0c;帮助参赛学生更好完成答辩环节。本文转载自高凯老师的微信公众号…

ts在vscode编辑器开发的环境搭建

tsconfig.json 也可以tsc --init {"compilerOptions": {"module": "commonjs","target": "es5","noEmitHelpers": true,"sourceMap": true},"exclude": ["node_modules"],"in…

线段树单点更新 hdu 2795 Billboard

题目链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid2795 题目大意&#xff1a;给你一个h*w的广告版&#xff0c;往上面贴1*wi的广告&#xff0c;求能够贴上且位置最上&#xff0c;最左的行hi&#xff0c;1 < h,w < 10^9; 1 < n < 200,000 思路&#…