2009-11-12 85 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); 
    } 
} 
相關問題