Silverlight动态读取图片并滚动显示
asp.net页面中图片上传并预览
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="MultiFileUpload.aspx.cs" Inherits="GQGL_MultiFileUpload" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head id="Head1" runat="server"> <title></title> <link type="text/css" rel="Stylesheet" href="css/album.css" /> </head> <body> <form id="form1" runat="server"> <div id="Layout_2"> <div id="Uploadimg" class="cols_1"> <div id="AlbumUpload" class="album meat"> <div class="upLoad" style="text-align: center"> <div id="uploadPanel"> <div class="divLine"> <asp:FileUpload ID="FileUpload1" runat="server" /> <asp:Button ID="btnAdd" runat="server" Text="添加文件" OnClick="btnAdd_Click" /> </div> </div> <div> <table style="text-align: center"> <tr> <td align="center" width="15%"> 文<br /> 件<br /> 列<br /> 表<br /> : </td> <td align="center" width="85%"> <asp:ListBox ID="lbxFile" runat="server" Height="145px" Width="300px"></asp:ListBox> </td> </tr> </table> </div> <div class="divLine"> <div class="btnUpload"> <asp:Button ID="btnDelete" runat="server" Text="删除文件" OnClick="btnDelete_Click" /> <asp:Button ID="btnPost" runat="server" Text="完成上传" OnClick="btnPost_Click" /> </div> </div> <p> 温馨提示:1、单张图片最大<span>10M</span><br /> 2、支持<span>jpg</span>,<span>png</span>格式 </p> </div> <div class="upView"> <div class="divLine"> 图片预览:</div> <ul> <li> <div class="p"> <img id="img1" alt="" title="暂无图片" src="images/uploadimg_default.jpg" runat="server" /></div> <div class="d" id="preTitle1"> 1</div> </li> <li> <div class="p"> <img id="img2" alt="" title="暂无图片" src="images/uploadimg_default.jpg" runat="server" /></div> <div class="d" id="preTitle2"> 2</div> </li> <li> <div class="p"> <img id="img3" alt="" title="暂无图片" src="images/uploadimg_default.jpg" runat="server" /></div> <div class="d" id="preTitle3"> 3</div> </li> <li> <div class="p"> <img id="img4" alt="" title="暂无图片" src="images/uploadimg_default.jpg" runat="server" /></div> <div class="d" id="preTitle4"> 4</div> </li> <li> <div class="p"> <img id="img5" alt="" title="暂无图片" src="images/uploadimg_default.jpg" runat="server" /></div> <div class="d" id="preTitle5"> 5</div> </li> <li> <div class="p"> <img id="img6" alt="" title="暂无图片" src="images/uploadimg_default.jpg" runat="server" /></div> <div class="d" id="preTitle6"> 6</div> </li> </ul> </div> <div id="x" runat="server"> </div> </div> </div> </div> <asp:HiddenField ID="allFileSize" runat="server" Value="0" /> </form> </body> </html>
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.IO; using System.Web.UI.HtmlControls; using System.Drawing; using USTC; public partial class GQGL_MultiFileUpload : System.Web.UI.Page { private String folder; private String url; DM dm = new DM(); protected void Page_Load(object sender, EventArgs e) { folder = Server.MapPath("~/ClientBin/image"); if (!Directory.Exists(folder)) { Directory.CreateDirectory(folder); } } protected void btnAdd_Click(object sender, EventArgs e) { if (FileUpload1.HasFile) { String guid = Guid.NewGuid().ToString(); String newFileName = folder + "\\" + guid + Path.GetExtension(FileUpload1.FileName); url = Page.ResolveUrl("~") + "ClientBin/image/" + guid + Path.GetExtension(FileUpload1.FileName); int totalFileSize = Int32.Parse(allFileSize.Value); int fileSize = FileUpload1.PostedFile.ContentLength; //此处也可以限制单个文件的大小 if (totalFileSize + fileSize > 1024 * 1024 * 100) { Page.ClientScript.RegisterClientScriptBlock(typeof(string), "", @"<script>alert('总上传的文件超过了大小设置 1024 * 1024 !')</script>"); return; } if (FileUpload1.FileName.Split('.')[1].ToLower() == "jpg" || FileUpload1.FileName.Split('.')[1].ToLower() == "png") { FileUpload1.SaveAs(newFileName); } else { Page.ClientScript.RegisterClientScriptBlock(typeof(string), "", @"<script>alert('添加的文件格式不正确,确保是jpg或png格式 !')</script>"); return; } ListItem item = new ListItem(); item.Text = FileUpload1.FileName; item.Value = url + "|" + newFileName; for (int i = 0; i < lbxFile.Items.Count; i++) { if (lbxFile.Items[i].Text.Equals(FileUpload1.FileName, StringComparison.InvariantCultureIgnoreCase)) { Page.ClientScript.RegisterClientScriptBlock(typeof(string), "", @"<script>alert('不能添加已经添加过的文件!')</script>"); return; } } totalFileSize += fileSize; allFileSize.Value = totalFileSize.ToString(); lbxFile.Items.Add(item); PreViewImage(); } } protected void btnPost_Click(object sender, EventArgs e) { //对上传的文件进行进一步处理,或者退出弹出窗口等操作 for (int i = lbxFile.Items.Count - 1; i > -1; i--) { //保存图片的同时保存入数据库表 string depId = Session["depId"].ToString(); string picUrl = lbxFile.Items[i].Value.Split('|')[1].Substring(lbxFile.Items[i].Value.Split('|')[1].LastIndexOf('\\')+1); string description = lbxFile.Items[i].Text.Split('.')[0]; string strSQL = "insert into 灌区图片(BelongToDepId,PicUrl,PicDescription) values('" + depId + "','" + picUrl + "','" + description + "')"; dm.execsql(strSQL); } for (int i = lbxFile.Items.Count - 1; i > -1; i--) { lbxFile.Items.Remove(lbxFile.Items[i]); } Page.ClientScript.RegisterClientScriptBlock(typeof(string), "", @"<script>alert('上传成功!')</script>"); } protected void btnDelete_Click(object sender, EventArgs e) { for (int i = lbxFile.Items.Count - 1; i > -1; i--) { if (lbxFile.Items[i].Selected) { String value = lbxFile.Items[i].Value; lbxFile.Items.Remove(lbxFile.Items[i]); //同时去掉预览中的图片 string index = "img" + (i + 1); (Page.FindControl(index) as HtmlImage).Src = "images/uploadimg_default.jpg"; (Page.FindControl(index) as HtmlImage).Width = 120; (Page.FindControl(index) as HtmlImage).Height = 90; (Page.FindControl(index) as HtmlImage).Attributes["title"] = "暂无图片"; if (File.Exists(value.Split('|')[1])) { File.Delete(value.Split('|')[1]); } } } } private void PreViewImage() { for (int i = 0; i < lbxFile.Items.Count; i++) { string index = "img" + (i + 1); (Page.FindControl(index) as HtmlImage).Src = lbxFile.Items[i].Value.Split('|')[0]; (Page.FindControl(index) as HtmlImage).Width = 120; (Page.FindControl(index) as HtmlImage).Height = 120; (Page.FindControl(index) as HtmlImage).Attributes["title"] = lbxFile.Items[i].Text.Split('.')[0]; } } }
Silverlight页面展示
<UserControl x:Class="gqfc.SPImageList" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="400" Loaded="UserControl_Loaded"> <Grid x:Name="LayoutRoot" Background="White"> <Border HorizontalAlignment="Right" Margin="0,25,0,0" Width="170" BorderBrush="#FF0084FF" BorderThickness="1"> <StackPanel x:Name="sp" MouseEnter="sp_MouseEnter" MouseLeave="sp_MouseLeave"> <Border x:Name="b1" Margin="0,2" BorderBrush="#FF0084FF" BorderThickness="0,1"> <Image x:Name="img1" Source="/gqfc;component/Photos/uploadimg_default.jpg" Cursor="Hand" Stretch="Fill" Height="128"/> </Border> <Border x:Name="b2" Margin="0,2" BorderBrush="#FF0084FF" BorderThickness="0,1"> <Image x:Name="img2" Source="/gqfc;component/Photos/uploadimg_default.jpg" Cursor="Hand" Stretch="Fill" Height="128"/> </Border> <Border x:Name="b3" Margin="0,2" BorderBrush="#FF0084FF" BorderThickness="0,1"> <Image x:Name="img3" Source="/gqfc;component/Photos/uploadimg_default.jpg" Cursor="Hand" Stretch="Fill" Height="128"/> </Border> <Border x:Name="b4" Margin="0,2" BorderBrush="#FF0084FF" BorderThickness="0,1"> <Image x:Name="img4" Source="/gqfc;component/Photos/uploadimg_default.jpg" Cursor="Hand" Stretch="Fill" Height="128"/> </Border> <Border x:Name="b5" Margin="0,2" BorderThickness="0,1" BorderBrush="#FF0084FF"> <Image x:Name="img5" Source="/gqfc;component/Photos/uploadimg_default.jpg" Cursor="Hand" Stretch="Fill" Height="128"/> </Border> <Border x:Name="b6" Margin="0,2" BorderBrush="#FF0084FF" BorderThickness="0,1"> <Image x:Name="img6" Source="/gqfc;component/Photos/uploadimg_default.jpg" Cursor="Hand" Stretch="Fill" Height="128"/> </Border> </StackPanel> </Border> <ComboBox x:Name="cbSelectArea" HorizontalAlignment="Right" VerticalAlignment="Top" Width="170" FontSize="13.333" FontFamily="Microsoft YaHei" Height="25" SelectionChanged="cbSelectArea_SelectionChanged"/> </Grid> </UserControl>
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.Windows.Threading; using System.Windows.Media.Imaging; using System.Windows.Media.Effects; using System.Json; using gqfc.ServiceReference1; using System.Collections.ObjectModel; namespace gqfc { public partial class SPImageList : UserControl { /// <summary> /// Json数据源 /// </summary> string imgData = "[{src:'/image/uploadimg_default.jpg',name:'暂无图片'}]"; int currentIndex = 0;//当前imgData的索引 int currentImgIndex = 0;//当前第几张小图为阴影区 int _Max = 6;//右侧显示几张小图 List<ImageItem> listSrc = new List<ImageItem>(); private DispatcherTimer _timer; public SPImageList() { InitializeComponent(); } #region 获取部门列表 /// <summary> /// 获取部门列表 /// </summary> public void BindComboBox() { getDataSoapClient client = new getDataSoapClient(); client.getDepartmentListCompleted += new EventHandler<getDepartmentListCompletedEventArgs>(client_getDepartmentListCompleted); client.getDepartmentListAsync(); } void client_getDepartmentListCompleted(object sender, getDepartmentListCompletedEventArgs e) { ObservableCollection<Department> lists = e.Result; this.cbSelectArea.ItemsSource = lists; this.cbSelectArea.DisplayMemberPath = "DepName"; this.cbSelectArea.UpdateLayout(); this.cbSelectArea.SelectedIndex = 0; } #endregion private void UserControl_Loaded(object sender, System.Windows.RoutedEventArgs e) { //绑定ComboBox BindComboBox(); getDataSoapClient client = new getDataSoapClient(); client.getAllImageCompleted += new EventHandler<getAllImageCompletedEventArgs>(client_getAllImageCompleted); client.getAllImageAsync(); LoadImageAndScroll(); } void client_getAllImageCompleted(object sender, getAllImageCompletedEventArgs e) { imgData = e.Result; //MessageBox.Show(imgData); } /// <summary> /// 加载图片并滚动显示 /// </summary> public void LoadImageAndScroll() { currentIndex = 0; currentImgIndex = 0; LoadImage(); #region 启动定时器 _timer = new DispatcherTimer(); _timer.Interval = new TimeSpan(0, 0, 2); _timer.Tick += new EventHandler(_timer_Tick); _timer.Start(); #endregion } /// <summary> /// 加载图片 /// </summary> public void LoadImages() { currentIndex = 0; currentImgIndex = 0; LoadImage(); } void _timer_Tick(object sender, EventArgs e) { down(sender, null); } /// <summary> /// 从下往上滚动的逻辑处理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void down(object sender, MouseButtonEventArgs e) { currentIndex++; if (currentIndex >= listSrc.Count) { currentIndex = 0; } LoadImage(); } /// <summary> /// 加载图片 /// </summary> private void LoadImage() { listSrc.Clear(); JsonValue jv = JsonArray.Parse(imgData); for (int i = 0; i < jv.Count; i++) { listSrc.Add(new ImageItem() { src = jv[i]["src"].ToString().Replace("\\/", "/").Replace("\"", ""), name = jv[i]["name"].ToString().Replace("\\/", "/").Replace("\"", "") }); } int _start = currentIndex % listSrc.Count; for (int i = 0; i < _Max; i++) { if (_start >= listSrc.Count) { _start = _start % listSrc.Count; } Image img = this.sp.FindName("img" + (i + 1).ToString()) as Image; if (i < listSrc.Count) { img.Source = new BitmapImage(new Uri(listSrc[_start].src, UriKind.Relative)); } else { img.Source = new BitmapImage(new Uri("/Photos/uploadimg_default.jpg", UriKind.Relative)); } //在这里处理个数问题 if (i == currentImgIndex) { int index = i + 1; //设置对应的Border边框和颜色 string tag = "b" + index; (sp.FindName(tag) as Border).BorderBrush = new SolidColorBrush(Colors.Red); (sp.FindName(tag) as Border).BorderThickness = new Thickness(2, 2, 2, 2); //增加阴影效果 //DropShadowEffect dse = new DropShadowEffect(); //dse.BlurRadius = 10; //dse.ShadowDepth = 10; //dse.Opacity = 0.8; //dse.Direction = 145; //img.Effect = dse; } else { img.Effect = null; } _start++; } } private void cbSelectArea_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e) { Department dp = this.cbSelectArea.SelectedItem as Department; //获取部门ID getDataSoapClient client = new getDataSoapClient(); client.getImageByDepartmentIDCompleted += new EventHandler<getImageByDepartmentIDCompletedEventArgs>(client_getImageByDepartmentIDCompleted); client.getImageByDepartmentIDAsync(dp.DepId); //MessageBox.Show(dp.DepId); } void client_getImageByDepartmentIDCompleted(object sender, getImageByDepartmentIDCompletedEventArgs e) { //重新赋值 imgData = e.Result; if (imgData == "[]") { imgData = "[{src:'/image/uploadimg_default.jpg',name:'暂无图片'}]"; } else { } //MessageBox.Show(imgData); //载入图片 LoadImages(); } private void sp_MouseEnter(object sender, System.Windows.Input.MouseEventArgs e) { _timer.Stop(); } private void sp_MouseLeave(object sender, System.Windows.Input.MouseEventArgs e) { _timer.Start(); } } /// <summary> /// 自定义类 /// </summary> public class ImageItem { public string src { set; get; } public string name { set; get; } } }