我制作了一个缩小图像并将其作为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;
}
我感谢任何想法和/或意见。提前谢谢。
答案 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();
这样您就不需要自己创建阵列了。