Cannot render image to HttpContext.Response.OutputStream

后端 未结 4 1789
面向向阳花
面向向阳花 2021-01-05 06:43

Basically I am trying to render a simple image in an ASP.NET handler:

public void ProcessRequest (HttpContext context)
{
    Bitmap image = new Bitmap(16, 16         


        
4条回答
  •  自闭症患者
    2021-01-05 07:07

    Image.Save(MemoryStream stream) does require a MemoryStream object that can be seeked upon. The context.Response.OutputStream is forward-only and doesn't support seeking, so you need an intermediate stream. However, you don't need the byte array buffer. You can write directly from the temporary memory stream into the context.Response.OutputStream:

    /// 
    /// Sends a given image to the client browser as a PNG encoded image.
    /// 
    /// The image object to send.
    private void SendImage(Image image)
    {
        // Get the PNG image codec
        ImageCodecInfo codec = GetCodec("image/png");
    
        // Configure to encode at high quality
        using (EncoderParameters ep = new EncoderParameters())
        {
            ep.Param[0] = new EncoderParameter(Encoder.Quality, 100L);
    
            // Encode the image
            using (MemoryStream ms = new MemoryStream())
            {
                image.Save(ms, codec, ep);
    
                // Send the encoded image to the browser
                HttpContext.Current.Response.Clear();
                HttpContext.Current.Response.ContentType = "image/png";
                ms.WriteTo(HttpContext.Current.Response.OutputStream);
            }
        }
    }
    

    A fully functional code sample is available here:

    Auto-Generate Anti-Aliased Text Images with ASP.NET

提交回复
热议问题