Windows应用商店应用中可以使用两种方法来显示图片,这两种方法分别为使用Image对象和使用ImageBrush对象。Image对象可以直接呈现一幅图像,而ImageBrush对象则可以用一幅图像来绘制其他对象。

9.2.1 ImageImageBrush

本节将介绍Image对象和ImageBrush对象的使用方法、常用属性等,下面先通过一个示例介绍Image对象的使用方法。

首先新建一个Windows应用商店的空白应用程序项目,并命名为ImageSample,在项目中新建一个名为Picture的文件夹,向文件夹中添加一张要显示的图片car.jpg。然后打开项目的MainPage.xaml文件,在Grid元素中添加一个Image控件,代码如下所示:

<Image HorizontalAlignment="Center" Height="650" Margin="237,64,237,0" VerticalAlignment="Top" Width="892" Source="Picture/car.jpg"/>

在上面的代码中,使用Source属性指定了Image控件显示的图像路径。启动调试后,可以看到,图像的显示效果如图9-1所示。

9-1使用Image对象显示图片的效果图

接下来介绍ImageBrush对象,它与Image对象非常相似,区别在于Image对象用于直接显示图像,而ImageBrush对象则是用一幅图像绘制其他对象区域,例如可以在Ellipse对象的Fill属性中使用ImageBrush对象,或者在Canvas对象的Backgruond属性中使用ImageBrush对象。

下面通过一个示例介绍如何在Ellipse控件的Fill属性中使用ImageBrush对象来显示图像。

首先新建一个Windows应用商店的空白应用程序项目,命名为ImageBrushSample,在项目中新建一个名为Picture的文件夹,并向文件夹中添加一张要显示的图片car.jpg。然后打开项目的MainPage.xaml文件,在Grid元素中添加如下代码:

<Ellipse Width="1206" Height="638" HorizontalAlignment="Left" Margin="80,70,0,0" Stroke="Black" VerticalAlignment="Top" >

     <Ellipse.Fill>

         <ImageBrush ImageSource="Picture/car.jpg"/>

     </Ellipse.Fill>

</Ellipse>

在上面的代码中,首先添加一个Ellipse元素并设置其属性,接着在Ellipse.Fill属性中使用ImageBrush控件的ImageSource属性指定要显示的图像路径。启动调试后,可以看到图像显示效果如图9-2所示。

9-2 通过ImageBrush绘制的Ellipse控件的效果图

了解了Image对象和ImageBrush对象的基本用法后,下面介绍它们的属性,这两个对象的属性类似,常用的属性如下:

q  Source属性,表示图片的地址源,支持本地图片,同时也支持网络图片。

q  Opacity属性,表示图片的不透明度,该属性可以设置为0.01.0的任意值,0.0表示图像完全透明,1.0表示图像完全不透明。

q  Clip属性,该属性可以精确裁减图片,只有在裁剪区域内的图像才会被显示,但目前尚不支持非矩形区域裁剪。

q  Stretch属性,表示图片的呈现状态,共有4种属性值,分别为NoneUniformUniformToFillFill,这4Stretch属性值的显示效果如图9-3所示。

9-3 不同Stretch属性值的显示效果

m  None值表示图像不会拉伸以填充溢出部分的尺寸。在将Stretch属性设定为该值时必须小心,如果原图像尺寸大于显示区域尺寸,那么设定为该值将导致图像被裁减,这通常是不可取的,因为在这种情况下并不能像刻意裁剪那样控制被裁减掉的图像部分。

m  Uniform值表示图像将被按比例拉伸以适应输出尺寸,即图像有一边满足规定的尺寸即可,图像的原始宽高比例将被保存下来,该值为Stretch属性的默认值。

m  UniformToFill值表示图像将被按比例拉伸以完全填充输出区域,图像的原始宽高比例将被保存下来。

m  Fill值表示图像将被按比例拉伸以适应输出尺寸,即图像有一边满足规定的尺寸即可,由于设定为该值时图像内容的宽高是被分别按比例拉伸的,因此图像的原始宽高比例将不会保存,在显示时图像有可能扭曲。

接下来通过一个示例,具体展示各种Stretch属性值的显示效果,读者可以仔细体会它们之间的差别,以便在使用时灵活选择各种Stretch属性值。

首先在Visual Studio 2012中新建一个Windows应用商店的空白应用程序项目,并命名为ImageStretch,在项目中新建一个名为Picture的文件夹,并向文件夹中添加一张需要显示的图片car.jpg。然后打开项目的MainPage.xaml文件,在界面上添加一个Image控件并命名为CarImage,用于显示图片,接着添加4Button控件,用来设置Stretch属性的4个属性值,完成之后的代码如下所示:

<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">

    <Image x:Name="CarImage" HorizontalAlignment="Center" Height="608" Margin="40,84,419,76" VerticalAlignment="Center" Width="1007" Source="Picture/car.jpg"/>

    <Button x:Name="NoneButton" Content="None" HorizontalAlignment="Left" Height="98" Margin="1058,64,0,0" VerticalAlignment="Top" Width="272" FontSize="36" Click="NoneButton_Click"/>

    <Button x:Name="UniformButton" Content="Uniform" HorizontalAlignment="Left" Height="98" Margin="1058,248,0,0" VerticalAlignment="Top" Width="272" FontSize="36" Click="UniformButton_Click"/>

    <Button x:Name="UniformToFillButton" Content="UniformToFill" HorizontalAlignment="Left" Height="98" Margin="1058,438,0,0" VerticalAlignment="Top" Width="272" FontSize="36" Click="UniformToFillButton_Click"/>

    <Button x:Name="FillButton" Content="Fill" HorizontalAlignment="Left" Height="98" Margin="1058,616,0,0" VerticalAlignment="Top" Width="272" FontSize="36" Click="FillButton_Click"/>

</Grid>

布局好前台界面后,接下来打开项目中的MianPage.xaml.cs文件,为4Button控件添加Click事件处理方法,实现单击不同按钮将CarImage控件的Stretch属性值设置为NoneUniformUniformToFillFill,从而改变图片的显示效果。

首先添加Name属性为“NoneButton”按钮的Click事件处理方法,单击按钮将CarImage控件的Stretch属性值设置为None,代码如下所示:

private void NoneButton_Click(object sender, RoutedEventArgs e)

{

    //设置Stretch属性值为None

    CarImage.Stretch = Stretch.None;

}

然后添加Name属性为“UniformButton”按钮的Click事件处理方法,单击按钮将CarImage控件的Stretch属性值设置为Uniform,代码如下所示:

private void UniformButton_Click(object sender, RoutedEventArgs e)

{

    //设置Stretch属性值为Uniform

CarImage.Stretch = Stretch.Uniform;

}

接下来添加Name属性为“UniformToFillButton”按钮的Click事件处理方法,单击按钮将CarImage控件的Stretch属性值设置为UniformToFill,代码如下所示:

private void UniformToFillButton_Click(object sender, RoutedEventArgs e)

{

    //设置Stretch属性值为UniformToFill

CarImage.Stretch = Stretch.UniformToFill;

}

最后添加Name属性为“FillButton”按钮的Click事件处理方法,单击按钮将CarImage控件的Stretch属性值设置为Fill,代码如下所示:

private void FillButton_Click(object sender, RoutedEventArgs e)

{

    //设置Stretch属性值为Fill

CarImage.Stretch = Stretch.Fill;

}

启动调试,分别为将Stretch属性值设定为NoneUniformUniformToFillFill后的图像显示效果对比如图9-4所示。

 

aStretch属性值为None                           bStretch属性值为Uniform

 

cStretch属性值为UnifromToFill                  dStretch属性值为Fill

9-4 四种Strech属性值的显示效果

posted on 2015-01-15 16:41  冯瑞涛  阅读(350)  评论(0编辑  收藏  举报