第28课 图片处理

news/2024/7/8 5:05:34 标签: image, silverlight, border, 图形

 

概述

本文将介绍在Silverlight 2中进行图片的处理,包括图片的拉伸、裁剪、半透明遮罩等内容。

创建图片

创建图片,我们可以直接使用Image控件或者在上一篇讲过的ImageBrush,使用ImageBrush可以填充图形或者控件的前景色、背景色等,只需要指定ImageSource属性。注意,在Silverlight 2 Beta 1中,目前似乎只支持.png格式的图片。

<Canvas Background="#CDFCAE">
    <Rectangle Canvas.Left="20" Canvas.Top="80"
               Width="240" Height="136" RadiusX="15" RadiusY="15">
        <Rectangle.Fill>
            <ImageBrush ImageSource="a1.png">
          ImageBrush>
        
           Rectangle.Fill>
    
            Rectangle>
    
    <Image Source="b1.png" Canvas.Left="320" Canvas.Top="80">
             Image>

              Canvas>

运行后如下所示:

border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="464" alt="TerryLee_Silverlight2_0137" src="http://images.cnblogs.com/cnblogs_com/Terrylee/WindowsLiveWriter/Silverlight228_A729/TerryLee_Silverlight2_0137_3.png" width="651" border="0" />

图片拉伸

当我们创建了一个图片的时候,如果不指定它的宽度和高度,它将会使用默认的规格来显示;如果指定了高和宽,图片将显示在指定高和宽的矩形区域内。可以通过苏醒Stretch来指定图片如何填充在该区域内,即图片拉伸。Stretch属性具有四个可选值:

None:不对图片进行拉伸以便填充规定的尺寸。

Uniform:按比例进行拉伸,直到有一边满足规定的尺寸区域为止,其余部分不会被填充,按最小尺寸填充。

UniformToFill:按比例进行拉伸,直到完全填充规定的尺寸区域为止,超出该区域的将会被裁剪,按最大尺寸填充。

Fill:不按比例拉伸,完全填充规定的尺寸区域,将会破坏图像的比例。

Stretch默认的属性是Uniform,为了更直观的看到这个四个值的区别,下面看一个例子,我们使用一个规格尺寸为160*90图片,中间带一个小的正方形:

border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="91" alt="TerryLee_Silverlight2_0138" src="http://images.cnblogs.com/cnblogs_com/Terrylee/WindowsLiveWriter/Silverlight228_A729/TerryLee_Silverlight2_0138_3.png" width="160" border="0" />

在页面上放置四个Border控件,大小为220*220,并在其中各放置一个Image,图片的大小也定义为220*220,设置四个Image的Stretch属性分别为None、Uniform、UniformToFill、Fill,如下所示:

<Canvas Background="#CDFCAE">
    <Border BorderBrush="Black" BorderThickness="3"
            Width="220" Height="220" Canvas.Left="40" Canvas.Top="50">
        <Image Source="a2.png" Stretch="None" Width="220" Height="220">
          Image>
    
           Border>
    
    <Border BorderBrush="Black" BorderThickness="3"
            Width="220" Height="220" Canvas.Left="330" Canvas.Top="50">
        <Image Source="a2.png" Stretch="Uniform" Width="220" Height="220">
            Image>
    
             Border>

    <Border BorderBrush="Black" BorderThickness="3"
            Width="220" Height="220" Canvas.Left="330" Canvas.Top="330">
        <Image Source="a2.png" Stretch="UniformToFill" Width="220" Height="220">
              Image> 
               Border> <Border BorderBrush="Black" BorderThickness="3" Width="220" Height="220" Canvas.Left="40" Canvas.Top="330"> <Image Source="a2.png" Stretch="Fill" Width="220" Height="220">
                Image> 
                 Border> 
                  Canvas>

运行后可以很明显的看到这个四个值的区别,如下图所示:

border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="740" alt="TerryLee_Silverlight2_0139" src="http://images.cnblogs.com/cnblogs_com/Terrylee/WindowsLiveWriter/Silverlight228_A729/TerryLee_Silverlight2_0139_5.png" width="651" border="0" />

裁剪图片

有时候我们只需要显示出图片的一部分,可以使用Clip属性对图片进行裁剪,在Clip属性中我们可以设置任意的几何图形,注意是Geometry而非前面讲过的Shape,关于Geometry后面会专门讲到。如下面的例子,裁剪出一个椭圆的区域:

<Canvas Background="#CDFCAE">
    <Image Source="a1.png" Canvas.Left="40" Canvas.Top="80">
          Image>
    <Image Source="a1.png" Canvas.Left="320" Canvas.Top="80">
        <Image.Clip>
            <EllipseGeometry Center="120,68" RadiusX="100" RadiusY="60">
            
           EllipseGeometry>
        
            Image.Clip>
    
             Image>

              Canvas>

运行后效果如下所示:

border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="461" alt="TerryLee_Silverlight2_0140" src="http://images.cnblogs.com/cnblogs_com/Terrylee/WindowsLiveWriter/Silverlight228_A729/TerryLee_Silverlight2_0140_3.png" width="647" border="0" />

半透明遮罩

使用图片的OpacityMask属性,可以解释为通过用OpacityMask属性指定的画刷的alpha通道值来遮掩图片的alpha通道值,可以使用的画刷有LinearGradientBrush, RadialGradientBrush和ImageBrush,而对于SolidColorBrush则可以直接通过Opacity属性实现。如下面的例子,我们对图片做一些渐变的效果:

<Canvas Background="#CDFCAE">
    <Image Source="a1.png" Canvas.Left="160" Canvas.Top="80" Opacity="0.7">
        <Image.OpacityMask>
            <LinearGradientBrush StartPoint="0,0" EndPoint="1,0">
                <GradientStop Offset="0.0" Color="#00000000" />
                <GradientStop Offset="1.0" Color="#FF000000" />
            
          LinearGradientBrush>
        
           Image.OpacityMask>
    
            Image>

             Canvas>

运行后效果如下:

border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="459" alt="TerryLee_Silverlight2_0141" src="http://images.cnblogs.com/cnblogs_com/Terrylee/WindowsLiveWriter/Silverlight228_A729/TerryLee_Silverlight2_0141_3.png" width="648" border="0" /> 

结束语

本文介绍了Silverlight中对于图片的处理,在后面我们还将利用这些知识做一个综合实例——实现图片的倒影效果。


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

相关文章

第29课 使用Transform实现更炫的效果(上)

概述 本文为理解Silverlight中的变换&#xff08;Transformations&#xff09;第一部分&#xff0c;在Silverlight中提供了四种基本变换&#xff1a;旋转变换&#xff08;RotateTransform &#xff09;、缩放变换&#xff08;ScaleTransform&#xff09;、倾斜变换&#xff08;…

[转] JSON数据解析错误处理办法!

-JSONValue failed. Error is: Unescaped control character [0x0D] 这个错误就是JSON解析的时候String 的时候出现转义字符。 对应用NSString 里的stringByReplacingOccurrencesOfString:"\r"withString:"" 取消掉转义字符就OK那&#xff01; NSString *j…

vscode中使用.d.ts对js进行智能提示

1项目根目录加入jsconfig.json&#xff0c;告诉编辑器这个是js项目 {// See https://go.microsoft.com/fwlink/?LinkId759670// for the documentation about the jsconfig.json format"compilerOptions": {"target": "es5","module"…

推荐10款来自极客标签的超棒前端特效[第五期]

日期&#xff1a;2013-5-20 来源&#xff1a;GBin1.com 本周推荐的10款来自极客社区的前端特效&#xff01;希望大家会喜欢&#xff01; 使用CSS实现网格矩阵多维体效果 用鼠标触动旋转魔方&#xff0c;会将其转化为立体模式旋转。 GBdebug在线调试地址&#xff1a;http://ww…

ORACLE 11G 约束

完整性约束指的是数据库中数据的正确性和相容性。主要指下面的&#xff1a;primary key 主键foreign key 外键unique 唯一not null 非空check 检查约束在Oracle中&#xff0c;使用constraint&#xff08;英文的意思就是约束&#xff09;关键字 为约束命名。如果用户没有命名&am…

数据实体转换类EntityHelper

/// <summary>/// 数据实体转换类/// </summary>public class EntityHelper{/// <summary>/// 判断DataSet默认表是否为空:true:不为空 false:为空。/// </summary>/// <param name"ds"></param>/// <returns></return…

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

概述 本文为使用Transform实现更炫的效果第二部分&#xff0c;在Silverlight中提供了四种基本变换&#xff1a;旋转变换&#xff08;RotateTransform &#xff09;、缩放变换&#xff08;ScaleTransform&#xff09;、倾斜变换&#xff08;SkewTransform&#xff09;、移动变换…

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

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