1

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

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

问题是:当我将该图像字节数组设置为流和位图时,文件大小已压缩 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);
}

}

4

1 回答 1

1

您正在使用相同的图像格式将其保存为流式传输的所有不同格式的图像。

现在只需更换

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

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

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

注意:您不需要创建不需要任何转换的新位图。您可以直接将其保存到流式传输System.Drawing.Image img

于 2013-09-19T07:29:55.173 回答