2009-11-12 55 views
0

我有大约200张图片要显示在页面上。如何在中继器或网格控件中显示图像?

数据库只存储图像所在的路径。图像本身存储在应用程序的文件夹中。 EG:d:/应用/网站/图像/

  • 我需要将原始尺寸图像转换为缩略图同时显示缩略图
  • 是否有任何功能做到这一点?
  • 理想情况下,显示屏将有5行和5列,然后使用分页显示其余数据。

实质上,图片库:应用程序在网格/中继器页面上显示缩略图图像,当用户单击该缩略图时,新的弹出窗口打开,显示整个图像。我可以使用中继器控制进行此项工作吗?

任何想法如何在中继器控制中显示缩略图图像。

有没有可以帮助我的网站?

回答

1

首先,我需要说的是,在服务器上存储缩略图可能比这个解决方案效率更高。这些代码中的一些原则可用于在图像上传时创建这些缩略图。这可能是更好的方法。

这就是说,这里是一个可能的解决方案。这真的很快就被破解了,但它确实有效。我使用类似的东西来提供数据库中的附件。创建一个新的ashx页面如下:

<%@ WebHandler Language="C#" Class="Handler" %> 

using System; 
using System.Web; 
using System.Drawing; 
using System.IO; 
using System.Drawing.Imaging; 

public class Handler : IHttpHandler 
{ 
    public void ProcessRequest(HttpContext context) 
    { 
     Bitmap b = new Bitmap(@"c:\temp\pictures\" + context.Request.QueryString["filename"]); 

     Image i = b.GetThumbnailImage(48, 48, null, System.IntPtr.Zero); 

     using (MemoryStream ms = new MemoryStream()) 
     { 
      i.Save(ms, ImageFormat.Jpeg); 
      context.Response.BinaryWrite(ms.ToArray()); 
     } 

     context.Response.ContentType = "image/jpeg"; 
    } 

    public bool IsReusable 
    { 
     get 
     { 
      return false; 
     } 
    } 
} 

这将找到一个文件谁的名字是从查询字符串传递,并创建缩略图和使用内存流来显示图像。您将显然必须调整路径,错误处理,确保MIME类型是正确的,等等。

一旦你完成这个,你可以在转发器中使用这个URL(类似于http://localhost/Handler.ashx?filename=myFirstImage)来生成你的缩略图。

+0

感谢重播, 但我如何将这个新创建的缩略图图像绑定在中继器控制中。是否有任何代码来实现 – happysmile 2009-11-13 06:13:17

+0

中继器控件的内部添加一个图像控件,并将URL设置为指向Handler.ashx控件。您需要某种唯一标识符来标识您希望Handler制作缩略图的图像。 – sgriffinusa 2009-11-13 08:22:59

+0

嘿我试过所有的组合没有任何工作,如果你可以写代码将是伟大的亚尔 – happysmile 2009-11-14 14:47:23

0

我知道这个帖子现在已经很老了,但对任何人都可能是有帮助的。我有同样的问题,并使用这种编码。

配置文件

<add key="WebResources" value="~/Assets/WebResources/" /> 
<add key="ImageRoot" value="Images\Web" /> 
<add key="ProfileImages" value="Images\Profile" /> 

Asp.Net Datalist中

<asp:DataList ID="dlPrivateAlbum" runat="server" OnItemCommand="dlPublicAlbum_ItemCommand" RepeatDirection="Horizontal" RepeatLayout="Flow"> 
<ItemTemplate> 
    <div class="boxgrid captionfull"> 
     <asp:Literal ID="lit_ImagePath" runat="server" Text='<%# Eval("URL") %>' Visible="false" /> 
     <asp:HyperLink runat="server" Target="_blank" ToolTip='<%#Eval("Description") %>' 
      ImageUrl='<%# ConfigurationManager.AppSettings["WebResources"] + ConfigurationManager.AppSettings["ProfileImages"] + @"\thumbs\" + Eval("URL") %>' 
      NavigateUrl='<%# ConfigurationManager.AppSettings["WebResources"] + ConfigurationManager.AppSettings["ProfileImages"] + @"\" + Eval("URL") %>' /> 
     <div class="cover boxcaption"> 
      <asp:LinkButton ID="lnkbtn_Edit" runat="server" CommandArgument='<%# Eval("ID") %>' CommandName="edit" CssClass="captionlink" Text='<%#Eval("Title") %>' /> 
     </div> 
    </div> 
</ItemTemplate> 

CSS:

.boxcaption{float:left;position:absolute;background:#000;height:70px;width:100%;opacity:.8;filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80);-MS-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=80)"} 
.captionfull .boxcaption{top:230px;left:0} 
.caption .boxcaption{top:190px;left:0} 
.captionlink:link, .captionlink:visited {color: #E2E2E2;text-decoration: none;} 
.captionlink:hover { text-decoration: underline; } 
.captionlink:active {color: #F5F5F5;} 

背后代码:

private void load(Guid userID) 
{ 
    try 
    { 
     loadOptions(); 
     DbContext = new Entities(); 

     user = DbContext.UserProfiles.FirstOrDefault(d => d.UserID == userID); 

     List<Album> albums = DbContext.Albums.Where(d => d.UserID == userID).ToList(); 

     if (albums != null) 
     { 
      dlPublicAlbum.DataSource = albums.FirstOrDefault(d => d.Type == "public").Images; 
      dlPublicAlbum.DataBind();    
     } 
    } 
    catch (Exception ex) 
    { 
     Msg.ShowAlert(this.Parent.Page, Msg.GeneralError_Title + " " + ex.GetType().Name, ex.Message, MsgType.Error); 
    } 
} 
相关问题