2011-05-17 62 views

回答

7

有没有必要添加一个httphandler。你应该在asp.net的MVC通过控制器这样做 例如:

public class PictureController : Controller 
{ 
    public FileResult GetImage(int pictureID) 
    { 
     byte[] fileContents = null; 
     //Get the file here. 
     return File(fileContents, "image/jpeg"); 
    } 
} 

在Global.asax中,你可以定义

routes.MapRoute("Picture-GetImage", "picture/{pictureID}", 
new { controller = "Picture", action = "GetImage" } 

你也可以使用System.Web.Helpers.WebImage帮手,或者手动操作,例如:

public static byte[] ProcessCropResizeImage(string imageurl, Size outputSize) 
{ 
    if (File.Exists(imageurl)) 
    { 
     MemoryStream result = new MemoryStream(); 
     ImageCodecInfo codec = ImageCodecInfo.GetImageEncoders().FirstOrDefault(m => m.MimeType == "image/jpeg"); 
     if (codec == null) 
      throw new ArgumentException(string.Format("Unsupported mimeType specified for encoding ({0})", "image/jpeg"), "encodingMimeType"); 
     EncoderParameters encoderParams = new EncoderParameters(1); 
     encoderParams.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 85L); 
     using (FileStream fs = File.OpenRead(imageurl)) 
     { 
      using (Image image = Image.FromStream(fs)) 
      { 
       using (Bitmap b = new Bitmap(outputSize.Width, outputSize.Height)) 
       { 
        using (Graphics g = Graphics.FromImage((Image)b)) 
        { 
         g.CompositingQuality = CompositingQuality.HighQuality; 
         g.SmoothingMode = SmoothingMode.HighQuality; 
         g.InterpolationMode = InterpolationMode.HighQualityBicubic; 
         g.DrawImage(image, 0, 0, outputSize.Width, outputSize.Height); 
         g.DrawImage(image, outputSize.Width, outputSize.Height); 
        } 
        b.Save(result, codec, encoderParams); 
       } 
      } 
     } 

     return result.GetBuffer(); 
    } 
    return null; 
} 
相关问题