显示高分辨率图像

时间:2013-09-19 05:50:05

标签: c# image memorystream

我正在数据库中保存高分辨率和高分辨率图像的压缩版本。

当用户请求高分辨率图像时,我需要显示压缩的图像。这是我的代码。

问题是:当我将图像字节数组设置为流和位图时,文件大小已压缩2.27MB到339kB。

我在这里做错了什么?

private void DisplayImageFromBytes(byte[] byteArray, int resizeWidth, bool isHiResImage)   {

if (isHiResImage)
{
    Stream stream = new MemoryStream(byteArray);
    System.Drawing.Image img = System.Drawing.Image.FromStream(stream);
    Bitmap bitmap = null;

    if (resizeWidth > 0 && img.Width > resizeWidth)
    {
        int newHeight = (int)((float)img.Height * ((float)resizeWidth / (float)img.Width));
        bitmap = new Bitmap(img, resizeWidth, newHeight);
    }
    else
    {
        bitmap = new Bitmap(img);
    }
    Response.ContentType = "image/Jpeg";
    bitmap.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
    stream.Dispose();
    img.Dispose();
    bitmap.Dispose();
}
else
{
    DisplayImageFromBytes(byteArray, resizeWidth);
}

}

1 个答案:

答案 0 :(得分:1)

您使用相同的图片格式将其保存为流式传输,以便为您提供所有不同格式的图片。

现在只需更换

bitmap.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);

bitmap.Save(Response.OutputStream, img.RawFormat);

RawFormat:将获取此图片的当前文件格式。

N.B:您不需要创建不需要任何转换的新位图。您可以直接将其保存到System.Drawing.Image img

的流中