2011-04-23 74 views
1

我一直在努力將圖像的縮略圖添加到gridview,以便圖像可以顯示爲較小版本的原始圖像。向gridview添加縮略圖

我仍然在學習C#編碼的過程,希望能得到一些幫助。我設法上傳圖片,甚至顯示圖片,但讓它thumnail大小是有問題的。

我會插入一些代碼無數次嘗試(全部返回錯誤)

親切的問候

if (upImage.HasFile) 
    { 
     try 
     { 
      string filename = Path.GetFileName(upImage.FileName); 
      //**************************************************** 

      System.Drawing.Image sourceImage = System.Drawing.Image.FromFile(Server.MapPath("~/") + filename); 

      System.Drawing.Image thumbNail = sourceImage.GetThumbnailImage(70, 70, new System.Drawing.Image.GetThumbnailImageAbort(ThumbnailCallback), IntPtr.Zero); 

      thumbNail.Save(Path.ChangeExtension(filename, "thumb")); 

      upImage.SaveAs(Server.MapPath("~/") + filename); 


      //upImage.SaveAs(Server.MapPath("~/") + filename); 
      lblUpload.Text = "Upload status: File uploaded!"; 
     } 
     catch (Exception ex) 
     { 
      lblUpload.Text = "Upload status: The file could not be uploaded. The following error occured: " + ex.Message; 
     } 
    } 

public bool ThumbnailCallback() 
{ 
    return true; 
} 

回答

1
public void Thumb(string file) 
{ 
    System.Drawing.Image image = System.Drawing.Image.FromFile(Server.MapPath(file)); 
    System.Drawing.Image thumbnailImage = image.GetThumbnailImage(70, 70, new System.Drawing.Image.GetThumbnailImageAbort(ThumbnailCallback), IntPtr.Zero); 
    System.IO.MemoryStream imageStream = new System.IO.MemoryStream(); 
    thumbnailImage.Save(imageStream, System.Drawing.Imaging.ImageFormat.Jpeg); 
    byte[] imageContent = new Byte[imageStream.Length]; 
    imageStream.Position = 0; 
    imageStream.Read(imageContent, 0, (int)imageStream.Length); 
    Response.ContentType = "image/jpeg"; 
    Response.BinaryWrite(imageContent); 
} 

使用此您將獲得的圖像的縮略圖,你可以使用這個無論你幫助want..Hope :)

+0

非常感謝的開關輸入。圖像已縮小爲縮略圖大小...我仍然很難綁定到gridview。 – Arianule 2011-04-23 13:40:38

+0

@Arianule - DId你可以綁定它? – TechGiant 2011-04-23 17:03:03

0

以下是簡短的答案之一:

private static MemoryStream GetImageResized(MemoryStream data, int previewWidth, int previewHeight) 
{ 
    const int pixelPadding = 6; 
    const int bottomSize = 0; 

    using (var src = new Bitmap(data)) 
    { 
     // default to width-based resizing... 
     int width = previewWidth; 
     var height = (int)(previewWidth/(src.Width/(double)src.Height)); 

     if (src.Width <= previewWidth && src.Height <= previewHeight) 
     { 
      // no resizing necessary... 
      width = src.Width; 
      height = src.Height; 
     } 
     else if (height > previewHeight) 
     { 
      // aspect is based on the height, not the width... 
      width = previewHeight/((src.Height/src.Width) == 0 ? 1 : (src.Height/src.Width)); 
      height = previewHeight; 
     } 

     using (
      var dst = new Bitmap(width + pixelPadding, height + bottomSize + pixelPadding, PixelFormat.Format24bppRgb)) 
     { 
      var rSrcImg = new Rectangle(0,0, src.Width, src.Height); 
      var rDstImg = new Rectangle(pixelPadding/2, pixelPadding/2, dst.Width - pixelPadding, dst.Height - pixelPadding - bottomSize); 
      using (Graphics g = Graphics.FromImage(dst)) 
      { 
       g.Clear(Color.FromArgb(64, 64, 64)); 
       g.FillRectangle(Brushes.White, rDstImg); 

       g.CompositingMode = CompositingMode.SourceOver; 
       g.CompositingQuality = CompositingQuality.GammaCorrected; 
       g.SmoothingMode = SmoothingMode.HighQuality; 
       g.InterpolationMode = InterpolationMode.HighQualityBicubic; 

       g.TextRenderingHint = TextRenderingHint.ClearTypeGridFit; 
       g.DrawImage(src, rDstImg, rSrcImg, GraphicsUnit.Pixel); 
      } 

      var ms = new MemoryStream(); 

      // save the bitmap to the stream... 
      dst.Save(ms, ImageFormat.Png); 
      ms.Position = 0; 

      return ms; 
     } 
    } 
} 

您可以致電此方法來調整圖像大小。例如:

private void GetThumbnailImage(HttpContext context, string fileName, int maxWidth, int maxHeight) 
{ 
var data = new MemoryStream(); 
using (var input = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read)) 
{ 
    var buffer = new byte[input.Length]; 
    input.Read(buffer, 0, buffer.Length); 
    data.Write(buffer, 0, buffer.Length); 
    input.Close(); 
} 

// reset position... 
data.Position = 0; 

MemoryStream ms = GetImageResized(
    data, maxWidth, maxHeight); 

context.Response.ContentType = "image/png"; 

// output stream... 
context.Response.OutputStream.Write(ms.ToArray(), 0, (int)ms.Length); 
// Possible Caching 
//context.Response.Cache.SetCacheability(HttpCacheability.Public); 
//context.Response.Cache.SetExpires(DateTime.UtcNow.AddHours(2)); 
//context.Response.Cache.SetETag(...); 

data.Dispose(); 
ms.Dispose(); 
} 

我寫了一篇關於它的文章。代碼示例已附加到文章中。這篇文章在波斯,但你可以使用谷歌翻譯。 http://www.devzone.ir/post/1389/09/16/Dynamic-Thumbnails-in-ASP.aspx