在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 >
< 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 ;
}
}
}
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,代震军
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。