httphandler生成的png未在旧浏览器(IE8)中显示
本文关键字:浏览器 IE8 显示 png httphandler | 更新日期: 2023-09-27 18:00:05
我制作了一个httphandler,它可以收缩图像并将其返回为PNG。这在我的带有IE 9的Vista PC上运行良好,但在一些带有IE 8的旧XP机器上则不然。这似乎很奇怪,这应该是一个浏览器问题,但对我来说,它看起来是这样的。但是,我在想,既然我在服务器上生成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;
}
我感谢任何想法和/或意见。提前谢谢。
使用不同格式调整大小:
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();
有了它,您将拥有一个按比例缩放的位图,还可以使用图形对象选项来获得更好的质量/更快的处理时间。
此外,要将MemoryStream转换为数组,最好使用ms.ToArray();
picArray = ms.ToArray();
这样就不需要自己创建数组了。