在silverlight开发,允许我们获取指定URL压缩包(zip)并读取其中的图片文件。而实现这个功能也
非常简单。下面是运行效果图:
首先,我们需要建立一个silverligth application ,名称为:DownLoadImg.
下面就是相应的page.xaml代码:
<
Grid
x:Name
="LayoutRoot"
Background
="White"
>
<
Grid.RowDefinitions
>
<
RowDefinition
Height
="250"
/>
<
RowDefinition
Height
="100"
/>
<
RowDefinition
Height
="50"
/>
</
Grid.RowDefinitions
>
<
StackPanel
Grid.Row
="1"
>
<
ListBox
x:Name
="ImageList"
/>
<
Button
x:Name
="Download"
Click
="StartDownLoad"
Content
="下载该图片"
/>
</
StackPanel
>
<
StackPanel
Grid.Row
="0"
>
<
ScrollViewer
HorizontalScrollBarVisibility
="Auto"
>
<
Image
x:Name
="ImgToFill"
>
</
Image
>
</
ScrollViewer
>
</
StackPanel
>
<
StackPanel
Grid.Row
="2"
>
<
Canvas
Canvas.Top
="70"
>
<
Rectangle
Name
="progressRectangle"
Height
="10"
Width
="0"
Fill
="AliceBlue"
/>
<
Rectangle
Height
="12"
Width
="202"
StrokeThickness
="1"
Stroke
="Black"
/>
<
TextBlock
x:Name
="progressText"
Canvas.Left
="210"
Text
="0%"
FontSize
="12"
/>
</
Canvas
>
</
StackPanel
>
</
Grid
>
接下来是page.xaml.cs(相关内容见注释):
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Net;
using
System.Windows;
using
System.Windows.Controls;
using
System.Windows.Documents;
using
System.Windows.Input;
using
System.Windows.Media;
using
System.Windows.Media.Animation;
using
System.Windows.Shapes;
using
System.IO;
using
System.Windows.Resources;
using
System.Windows.Media.Imaging;
namespace
DownLoadImg
{
public
partial
class
Page : UserControl
{
WebClient wc
=
new
WebClient();
public
Page()
{
InitializeComponent();
this
.Loaded
+=
new
RoutedEventHandler(Page_Loaded);
}
//
加载图片列表数据
void
Page_Loaded(
object
sender, RoutedEventArgs e)
{
ImageList.Items.Add(
"
1.jpg
"
);
ImageList.Items.Add(
"
2.png
"
);
}
//
实例化下载设置
void
StartDownLoad(
object
o, EventArgs e)
{
//
初始化相应控件信息
ImgToFill.Visibility
=
Visibility.Collapsed;
progressRectangle.Width
=
0
;
progressText.Text
=
"
0%
"
;
//
绑定下载过程中处理的事件
wc.OpenReadCompleted
+=
new
OpenReadCompletedEventHandler(wc_OpenReadCompleted);
wc.DownloadProgressChanged
+=
new
DownloadProgressChangedEventHandler(wc_DownloadProgressChanged);
//
开始异步读取压缩包中的文件信息
wc.OpenReadAsync(
new
Uri(
"
img.zip
"
, UriKind.Relative), ImageList.SelectedItem);
}
void
wc_OpenReadCompleted(
object
sender, OpenReadCompletedEventArgs e)
{
//
实例化流资源信息,准备获取其中的图片数据
StreamResourceInfo sri
=
new
StreamResourceInfo(e.Result
as
Stream,
null
);
//
要读取的图片路径信息
String sURI
=
e.UserState
as
String;
//
从流资源中获取指定的URL图片流信息
StreamResourceInfo imageStream
=
Application.GetResourceStream(sri,
new
Uri(sURI, UriKind.Relative));
BitmapImage imgsrc
=
new
BitmapImage();
//
绑定该URL图片信息并进行显示
imgsrc.SetSource(imageStream.Stream);
ImgToFill.Source
=
imgsrc;
ImgToFill.Visibility
=
Visibility.Visible;
ImgToFill.Stretch
=
Stretch.Fill;
}
void
wc_DownloadProgressChanged(
object
sender, DownloadProgressChangedEventArgs e)
{
//
下载过程中的进度显示
progressText.Text
=
e.ProgressPercentage.ToString()
+
"
%
"
;
progressRectangle.Width
=
(
double
)e.ProgressPercentage
*
2
;
}
}
}
好了,今天的内容就到这里了。
源码下载链接,请点击这里:)
TAG: silverlight, image, zip, daizhj,代震军