httpsndler生成的png不在旧浏览器中显示(IE8)

时间:2014-04-25 00:04:38

标签: c# asp.net internet-explorer-8

我制作了一个缩小图像并将其作为PNG返回的httphandler。这在使用IE 9的Vista PC上运行良好,但在使用IE 8的旧机器上却没有。看起来很奇怪这应该是一个浏览器问题,但对我而言看起来就是这样。但是,我在想,因为我在服务器上生成了PNG,所以我必须在代码中做错。

httphandler(简化):

<%@ WebHandler Language="C#" Class="ShowPicture" %>
using System.Data;
using System;
using System.IO;
using System.Web;

public class ShowPicture : IHttpHandler {

public void ProcessRequest (HttpContext context) {
    context.Response.ContentType = "image/png";
    // byteArray comes from database
    // maxWidth and maxHeight comes from Request
    context.Response.BinaryWrite(
        Common.ResizeImageFromArray(byteArray, maxWidth, maxHeight));
}

这个函数叫(简化了):

public static byte[] ResizeImageFromArray(byte[] array, int maxWidth, int maxHeight)
{
    byte[] picArray = array;

    if (maxWidth > 0 || maxHeight > 0)  // Resize the image
    {
        Bitmap dbbmp = (Bitmap)Bitmap.FromStream(new MemoryStream(array));

        if (dbbmp.Width > maxWidth || dbbmp.Height > maxHeight)
        {
            // Calculate the max width/height factor

            Bitmap resized = new Bitmap(dbbmp, newWidth, newHeight);
            MemoryStream ms = new MemoryStream();
            resized.Save(ms, System.Drawing.Imaging.ImageFormat.Png);

            picArray = new Byte[ms.Length - 1];
            ms.Position = 0;
            ms.Read(picArray, 0, picArray.Length);
            ms.Close();
        }
    }
    return picArray;
}

我感谢任何想法和/或意见。提前谢谢。

1 个答案:

答案 0 :(得分:2)

使用不同格式调整大小:

Bitmap resizedBitmap = new Bitmap(newWidth, newHeight, PixelFormat.Format32bppArgb);
Graphics g = Graphics.FromImage(resizedBitmap);
g.DrawImage(originalBitmap, new Rectangle(Point.Empty, resizedBitmap.Size), new Rectangle(Point.Empty, originalBitmap.Size), GraphicsUnit.Pixel);
g.Dispose();

使用yopur缩放位图,您也可以使用Graphics对象选项来获得更好的质量/更快的处理时间。

另外,将MemoryStream转换为数组最好使用ms.ToArray();

picArray = ms.ToArray();

这样您就不需要自己创建阵列了。